毎日がんばれあたん

計量社会学に関するメモとモチベーションを高めてくれる推しについて

stataコマンド logファイルの使い方とメリット

おつかれあたん

 

 

今回,logファイルの機能を用いてstataの出力結果とコマンドをまとめて確認する

ためのstataコマンドとその方法についてメモしておきます.

※このコマンドの通称が「log ファイル」なのか不明ですが,ここではそうします.

 

stataの欠点の一つとして,出力ファイルの編集が面倒だということがあると思います.

excelとの互換性に乏しいため,そのまま貼り付けようとしても,

行ずれや余計な空白ができたりして,それをいちいち修正するのは

かなり手間だったりします.

 

もし,論文などに表を掲載する場合は,面倒でもちゃんと修正する必要はありますが,

たとえば「ゼミの報告で使いたい」といった場面や「自分が後ですぐ確認できるようにしたい」というように,わざわざ成型された図表を提示する必要がない場面では

なるべく手間をかけずにわかりやすく結果を発表したいということがありえるかと思います。

 

そこで重宝するのが,logファイルです.

logファイルとは,(自分のざっくりした理解では)

「stataのコマンドを実行したときに出力viewに表示される結果を.smclという拡張子で

保存して,その出力を後で閲覧する機能」

になります.

 

使ったことがない人にはいまいち利点やイメージが伝わらないと思うので

(最初は自分も意味不明でした)仮想データを用いながら

コマンドも併せて説明します.

 

仮想データは下記のものです.

変数は

sex(性別:1=男性,2=女性),

age(年齢:20~40歳の連続変数)

job(雇用形態:0=非正規,1=正規)

income(収入:100~1000万の連続変数)

となります.

乱数を発生して作成しましたが,雇用形態とincomeが正の関連を

取るように,一部恣意的な入力を行いました.

 

さて,データを使って実際にdoファイルを作成していきます.

今回使用しているのはstata ver.16になります.

 

今回は収入を従属変数とした分析をすると設定し,以下のような分析を試みます.

①独立変数として使う「女性ダミー」変数を性別変数から作成

②雇用形態別に収入の記述統計量を出力

③女性ダミー,年齢,雇用形態を独立変数,収入(対数変換)を従属変数とした重回帰分析

となります.

(ふつう,収入は自然対数に変換しますが本筋ではないので無視してます)

 

実際のdo ファイルのコマンドはこんな感じです.

 

****2020年●月▲日作業*****
**データの読み込み
capture use "C:\Users\reata\OneDrive\デスクトップ\log_example.dta",clear

*****変数の変換
***女性ダミー変数作成
recode sex 1=0 2=1,gen(femaledummy)

*****収入を従属変数とした分析
***雇用形態別の収入の記述統計量
***正規雇用のほうが収入が高い
sum income if job==0
sum income if job==1

***収入を従属変数とした重回帰分析
**雇用形態のみ有意となった.収入や年齢が有意となっていないけど大丈夫か?
reg income femaledummy age job

  

本筋から逸れますが,コマンドの細かい確認です.

 

【データの読み込み:use】

データの読み込みはuseというコマンドになります.これで.dtaファイルが開けます.

フォルダからデータを探してクリックして開くこともできますが,

こちらのほうが後で説明する理由から便利です.

captureと先頭につけると,もしこのコマンドにエラーが出た場合でも,

続きのコマンドを実行してもよい,という命令になります.

(ふつう,stataはコマンドエラーが出ると続きのコマンドが実行されない.)

このcaptureはuseに限らずあらゆるコマンドの先頭につけることができますが,

特にuseコマンドの前につけると便利なことが多いです.

というのも,個人が複数のPCを用いてstataのコマンドを書いているor共同研究者と異なるPCでstataのコマンドを共有しあっているといった場合に、

一つのdoファイルの中に,

capture use・・・

capture use・・・

というように,AさんとBさんの複数のディレクトリを示しておけば,

どちらか一方のディレクトリが正しく示されていればデータを読み込むことができる

ため大変便利です.また,doファイルの保存場所さえ覚えておけばデータの保存先と

データ名はdoファイルにメモされているため記憶の節約ができると思います.

 

ちなみにディレクトリとはコンピュータの中の住所だと思ってもらえれば問題ないです.useの後の" "で囲まれた中に実際の住所を指定するわけですが,

簡単にいってしまえば,

 "日本:東京都\文京区\本郷\東京大学"

のように\の後ほど下層の住所を指定していく感じです。

 

オプションのclearはすでに,stata内に別のデータが読み込まれていて,それが

保存されていない状態であっても,そのデータを保存しないで新しいデータを読み込ませる,という命令になります.

 

 

 

 

さて,上記のコマンドを実行すると次のような出力が出てくると思います.

(スクショで貼り付けてます.)

f:id:umatake:20200423183624p:plain

f:id:umatake:20200423183628p:plain

 

 

もし,上記のような結果をすべてゼミ報告をしたいという場合,

これらの結果をexcel等に一つずつ貼り付けて,それを編集して,最後にwordファイル等に貼り付ける,といった手順を踏むことが多く,かなり面倒です.

 

そこで,log ファイルというものを活用します.

下記のようなコマンドです.

 

*****log ファイル*****
cd "C:\Users\reata\OneDrive\デスクトップ"
log using result2020income,replace

****2020年●月▲日作業*****
**データの読み込み
capture use "C:\Users\reata\OneDrive\デスクトップ\log_example.dta",clear

*****変数の変換
***女性ダミー変数作成
recode sex 1=0 2=1,gen(femaledummy)

*****収入を従属変数とした分析
***雇用形態別の収入の記述統計量
***正規雇用のほうが収入が高い
sum income if job==0
sum income if job==1

***収入を従属変数とした重回帰分析
**雇用形態のみ有意となった.収入や年齢が有意となっていないけど大丈夫か?
reg income femaledummy age job

log close

 ***************************************

 

 

logファイルを実行する前にはまず,cdというコマンドを実行します.

cdとは,change directoryの略です.

ディレクトリは前述したとおり,コンピュータの住所になります.

cdの後の" "の中に住所を指定し,

今回の例でいえば,最終的にはデスクトップを指定していることになります.

 

その後のコマンドがlogファイルを取るコマンドとなります.

まず,log using までが「logファイルを記録しろ」というコマンドで,その後のresult2020incomeはファイル名となっています.

つまり,「result2020incomeというファイル名でログを記録して,それをデスクトップに保存しろ」というコマンドを実行したことになります.

オプションのreplaceも重要で,これを入れると上書き保存になります.

replaceを入れないといちいち,ファイル名を変更しなければなりません.

(すでに存在するファイル名です,というエラーが表示されるため).

書き換えない場合はもちろん,replaceをとって,ファイル名を変更してください.

そのため,ここは各自のPCの環境に合わせてディレクトリを変更する必要があります.

 

そして,重回帰分析を行ったコマンドの最後にlog closeというコマンドを入力します.

これは,文字通り「logファイルの記録を終了します」

というコマンドなのですが,これはlog usingと合わせて使うコマンドであって,

「log usingからlog closeの間に挟んでいるdoファイルの実行結果のログをすべて記録しろ」

という命令になります.

 

ここまでlogファイルと繰り返し言ってきましたが,実際何が起きているのかよくわからないと思うので,実際の画面で確認してみます.

 

まず,上記のコマンドをstataですべて実行してみます.

するとstata上の出力ではlog usingのコマンドを実行する前と

特段変わったところはなさそうです.

 

次にcdで指定したディレクトリ先に行ってみます.今回の例だと,デスクトップです.

すると,下記のように「result2020.income.smcl」というファイルが作成されていることが分かります.

f:id:umatake:20200423185346p:plain

 

 

 

これこそがlogファイルの正体です.拡張子はデフォだと.smclとなっています.

 

これを開くと下記のような画面が出てきます.

f:id:umatake:20200423190440j:plain

f:id:umatake:20200423190029p:plain

 

これは,log using とlog closeで囲まれたdoファイルのコマンドを実行した

結果,stataの出力画面に表示されたすべての情報を記録したものとなります.

 

これの便利なところは,例えばゼミの場面でこの画面を見せれば

その人がどういった変換をして結果を出したのかすぐ分かるし,

かつコメントを残しておけば,どういった手順で変数の変換をして出した結果なのか,

どういった点が気になっているのか,などを実際の結果と合わせてみることができる

点にあります.

今回女性ダミーという変数を作成しましたが,もしこの変換がおかしい場合なんかには

結果の表と見比べてながら「このコマンドがおかしい」というコメントをもらったり,

過去のログファイルを開けばいつの時点でコマンドが間違えていたのか,振り返ることもできるわけです.

 

またopened onというところには,logファイルを取った日時が記録されているため,

この分析がいつの時点のものかも知ることができます.

 

 

使い方は色々ですが,いずれにせよ,わざわざエクセル等で図表を編集して提示する手間が省けます.

 

ディレクトリの指定など,慣れるまでは少し面倒なところがありますが,

とても便利な機能です。