Doファイルからデータを作成し、さらに実践で必要とされるデータ編集機能について学習します。 ここまでの学習でデータを取り込む方法を2つ学習しました。ひとつは Stata に既に読み込まれているファイルを読み込む方法で、もう一つは Excel ファイルを読み込む方法です。 今回は3つめの方法として、Doファイルのなかでファイルを取り込む方法を学習します。この方法を覚えるメリットとしては、小規模なデータセットをすぐに作成することができるということです。 例えば、目の前に10個だけの手書きのデータセットがあって、それを入力して解析したいとします。そのような小規模な解析のときに、いちいち Excel を立ち上げてデータを入力して、さらにファイルを読み込むという動作は結構面倒です。Doファイル内でデータが作れるようになれば、ハードルはかなり下がります。 まずは実際にデータを作りましょう。想定しているのは、A、Bの2カ所の測定場所において、それぞれ一週間確認した気温です。最初は気温の列だけを作ってみましょう。 Doファイルの中身は次のようになります。 clear input temp 21 23 20 18 25 24 21 28 27 29 30 24 31 27 end このDoファイルを実行すると、1行目にある ``clear`` コマンドのために、現在あるデータは消去されるので注意してください。 Doファイルの解説を行いましょう。 一行目の ``clear`` はそれまで保存されているデータを全て消去します。二行目の ``input temp`` で、変数名 ``temp`` (temperature、気温) を作成しています。 三行目から変数 ``temp`` の数字を順番に記載しています。全部記載が終わったら、最後に ``end`` を入力してデータ入力は終了です。簡単ですね。 ではDoファイルを実行してみましょう。 . clear . input temp temp 1. 21 2. 23 3. 20 4. 18 5. 25 6. 24 7. 21 8. 28 9. 27 10. 29 11. 30 12. 24 13. 31 14. 27 15. end . end of do-file [View]>[Data Editor]>[Browse] でデータエディタを開いて見てみると次のように見えます。 ![データエディタ](data_editor_06.png) Doファイルに入力した値が、データとして Stata に取り込まれているのが分かります。 気温を観測した地点も追加して入力しましょう。今作成したDoファイルを以下のように修正します。 clear input temp str8 point 21 "A" 23 "A" 20 "A" 18 "A" 25 "A" 24 "A" 21 "A" 28 "B" 27 "B" 29 "B" 30 "B" 24 "B" 31 "B" 27 "B" end 2行目が少し複雑ですね。 ``str8 point`` というのは**「文字列 (``str``) で長さ ``8`` の ``point`` (地点) という変数を作ってください」**という命令になります。``str`` というのは string (文字列)の略称です。長さが ``8`` というのは私が適当に決めました。ここでは ``A`` と ``B`` といういずれも長さが ``1`` の文字列しか入力していませんので、 ``str1`` でも結果は同じになります。一般に文字列を作るときは最低でも 8 の長さのものを作るのが慣例になっているので、長さ 8 としました。``str8`` というのは変数名ではなく、その後に続く変数 ``point`` の型(かた)を決めていることに注意してください。 そのあとは気温のデータの後に文字列のデータを順番に並べていきます。最初から7つはA地点のデータで、残り7つがB地点のデータです。文字列はダブルクオーテーション(``"``)で囲む決まりになっていますので、``"A"`` のように入力してください。ダブルクオーテーションは、一般的な日本語キーボードであれば ``Shift``キーを押しながら数字キーの ``2`` を押すことで入力されます。 できあがったDoファイルを実行すると、次のようなデータエディタの画面が得られると思います。 ![データエディタ](data_editor_07.png) 最初の自動車のサンプルデータを扱ったときと同じように、文字列が赤で示されているのがわかります。 つづいて、このサンプルファイルを用いてデータを編集していく作業を学習しましょう。 ## 新しく変数を作る generate 現在ある変数を元に色々な計算を施した新たな変数を作成することは日常的によくあります。今入力したデータは摂氏(℃)ですが、この値から華氏(℉)を計算しましょう。華氏はアメリカなどで使われている温度の単位です。 摂氏を1.8倍して32を加えると華氏に変換されます。これを手で計算して一つずつ入力するのは大変です。Stata に計算してもらいましょう。 新しく ``tempf`` という変数を作成して、そこに計算した結果が入るようにします。``tempf`` の ``f`` は華氏(F)の意味です。``temp`` を1.8倍して32 を加えた変数を作成する方法は次の通りです。 . generate tempf = temp * 1.8 + 32 ``generate`` は新たな変数を作り出すコマンドです。既存の変数である ``temp`` を利用した計算式をイコール ``=`` の右側に書くことで、その計算式の結果を含む変数が作成されます。 データエディタを確認してみましょう。 ![データエディタ](data_editor_08.png) ``tempf`` という変数が作成されており、計算結果が記載されていることが確認できます。 ``generate`` の右側は必ずしも既存の変数をもちいた計算式である必要はありません。例えば、一律に ``100`` を含む変数 ``hyaku`` は次のように作成できます。 . generate hyaku = 100 同様のことは文字列でも行えます。たとえば、今回のデータは全て山田さんが測定したとして ``"Yamada"`` を含む変数 ``person`` は以下のように作成できます。 . generate person = "Yamada" また ``_n`` という特殊な値を用いることで、行番号を含む列を作成することができます。 . generate serial = _n 行番号というのは、データエディタを開いたときに一番左に出てくる数字です。次に示す図をご参照ください。 ``hyaku``、``person``、``serial`` を作成するとデータエディタは次のようになります。 ![データエディタ](data_editor_09.png)