webuse lbw
regress bwt age lwt
estimates store model1
regress bwt age lwt i.smoke i.ptl
estimates store model2
etable, estimates(model1 model2) mstat(N) mstat(r2) export(mytable.xlsx)
データの形式の変換や複数のデータを結合するためのコマンド、データから特定の条件に合う観測行を抽出するコマンド、変数を生成するコマンドなどデータ加工に関するコマンドをご紹介します。
Stataでは、データに対してデータラベル・変数ラベル・値ラベルを付与でき、データを理解するのに役立ちます。
以下では主にラベルを付与するためのコマンドを紹介しますが、describeコマンドやcodebookコマンドを実行してラベルの内容を確認できます。
マクロ変数にはグローバルとローカルの2種類があります。マクロ変数を活用することで数値や文字列を一時的に保持したり、参照することができます。その他、Stored results、繰返し処理、条件分岐などでも使用されます。(Stored resultsとは、コマンドを実行後にメモリ上に格納されている値のことで、各コマンドのヘルプファイルの下部に記載があります。コマンドを実行するたびにこのメモリ上の値は書き換わります。)
macro list
globalマクロ変数は作成してから、削除するかStataを閉じるまで参照できます。
localマクロ変数は、その変数が生成されたDoファイルやプログラム内でのみ参照され、一連の処理が終了すると削除されます。
localマクロ変数はDoファイル内などの限られた範囲でのみ参照されるため、他のプログラムで同名のマクロ変数が作成されていないかを
気にする必要がありません。このため、基本的にlocalマクロ変数を使用します。
繰返し処理と条件分岐
繰返し処理と条件分岐を行うためのコマンドを紹介します。Stataにおける繰返し処理のイテレータ(反復子)や条件分岐の条件式の記述にはマクロ変数を使用します。Doファイルにて使用例をお試しください。
項番コマンド説明使用例
1foreachリストの要素ごとに括弧内のコマンドを実行
foreach in と foreach of の2通りの指定が可能です。
in の後にスペース区切りで要素を記述します。
of を使用する場合、リストタイプを指定する必要があります。
リストタイプ:local, global, varlist, newlist, numlist
(詳しくは、help foreach)
2forvalues指定した範囲の値ごとに括弧内のコマンドを実行
範囲の指定例1: 5/10 ⇒ 5, 6, 7, 8, 9, 10
範囲の指定例2: 5(5)30 ⇒ 5, 10, 15, 20, 25, 30
(詳しくは、help forvalues)
3while指定した条件式が真の間、括弧内のコマンドを実行
使用例では、ローカルマクロ変数を使用して変数を生成しています。
(詳しくは、help while)
4ififコマンド(if修飾子とは異なる)
if の後に条件式、コマンドを記述します。
条件式が真であればコマンドを実行し、
偽であれば実行しません。
5if elseelseコマンド
ifコマンドで指定した条件式が偽の場合に
実行したい処理を記述します。
Stataでは様々な統計解析を行うことができますが、ここでは一部の代表的なコマンドをご紹介します。
Stataの一部の推定コマンドについて関連を示すマップを作成しました。推定コマンドの関係性を理解する資料としてお役立てください。
Stataに新しく実装された機能をまとめて紹介しております。合わせてご参考ください。
Stataでコマンドを実行すると結果ウィンドウに計算結果が表示されますが、より詳細な情報がメモリ上に格納されます。
このメモリ上に格納されている結果のことを Stored results と呼びます。ここでは、Stored results を参照するためのコマンドをご紹介します。
Stored results として格納される項目はコマンド毎に異なるため、どのような項目が保持されているかについてはヘルプファイル内の Stored results をご確認ください。
また、計算に要した実行時間を計測するためのコマンドやエラーが生じる場合にデバッグの助けとなるコマンドをご紹介します。
項番コマンド説明使用例
return list
一般的なコマンドのStored resultsを表示
直近に実行したコマンドの計算結果のみを保持します。
後続の処理で値を参照したい場合、マクロ変数に退避させる必要があります。
ereturn list
推定結果に関するStored resultsを表示
直近に実行した推定コマンドの計算結果を保持します。
creturn list
システム上のパラメータの表示
matrix list
行列の表示
推定された係数や分散共分散行列は行列として格納されます。
そのため、ereturn listコマンドでは具体的な値は表示されません。
行列の内容を表示するにはmatrix listコマンドを使用します。
set rmsg on
set rmsg off
実行時間の表示
コマンドを実行した際に計算処理に要した時間を表示します。
コマンド毎の時間に加えて、Doファイル単位でも実行時間を表示します。
set trace on
set trace off
プログラムの実行をトレース
デバッグ中にプログラムの実行を追跡するために使用します。
エラーが生じる原因を調査したい場合「set trace on」を実行後、
コマンドを実行してください。
capture
noisily
プログラム実行中にエラーが生じても処理を止めたくない場合に使用します。
コマンドの冒頭に「capture : 」と記述するとエラーが生じても処理を止めません。
capture を使用すると実行結果が表示されません。
結果を表示したい場合は noisily コマンドを併用します。
regressコマンドなど推定コマンドを実行後、推定結果の診断や保存するためのコマンドが用意されています。
ここでは推定後コマンドの一例を示しますが、推定コマンドごとに実行できる推定後コマンドは異なります。
どのような推定後コマンドがあるかを確認するには、「help コマンド名 postestimation」を実行して表示されるヘルプファイルをご覧ください。
(例:help regress postestimation)
項番コマンド説明使用例
predict
推定結果をもとに予測値の算出
estat hettest
不均一分散の検定
estat vif
分散拡大要因
多重共線性が生じていないか確認するための指標です。
estat ic
AIC(赤池情報量規準)、BIC(ベイズ情報量規準)の表示
estat vce
推定された分散共分散行列
estimates store
メモリ上に推定結果を保存
名前を指定して推定結果を保存します。
保存した推定結果は、estimates restoreコマンドで呼び出せます。
estimates save
ファイル名を指定して推定結果を保存
「ster」という拡張子のファイルが生成されます。
保存したファイルは、estimates useコマンドで読込みます。
rvfplot
残差と予測値の散布図
集計表や推定結果の表をExcelファイルに出力したい場合は、
collect export
または
etable , export()
コマンドなどを使用して出力します。
また、グラフを出力したい場合は、
graph export
コマンドを使用して出力します。
ここでは、Stataで計算した結果をより柔軟にExcelファイルに出力できる
putexcel
コマンドを
ご紹介します。Excelファイルの指定(
putexcel set
)、出力(
putexcel
)、
保存(
putexcel save
)など複数のコマンドを使用して柔軟にExcelファイルに出力できます。
日常的に行う定型的なExcelファイルへの出力作業は、これらのコマンドを活用することで手作業の手間を省き、
短時間で正確に行うことができます。
項番コマンド説明使用例
putexcel set
ファイル名を指定して、
出力対象となるExcelファイルを設定します。
putexcel set "出力結果.xlsx"
putexcel describe
putexcel clear
putexcel セル参照 = 値
指定したセル参照に値(数値や文字列)を出力します。
フォーマットオプションを指定して、
セルの背景色、罫線、フォントなどを指定できます。
putexcel set "出力結果.xlsx"
putexcel B2 = "出力テスト"
putexcel B3 = "`c(current_date)'"
putexcel B4 = 1+4/2
putexcel save
putexcel clear
putexcel セル参照 = matrix( 行列名 )
指定したセル参照に行列を出力します。
フォーマットオプションを指定して、
セルの背景色、罫線、フォントなどを指定できます。
putexcel set "出力結果.xlsx"
webuse auto
regress mpg price weight
matrix r = r(table)'
putexcel B3 = matrix(r) , names
putexcel save
putexcel clear
putexcel save
Excelファイルを保存して閉じます。
putexcel set "出力結果.xlsx"
putexcel describe
putexcel save
putexcel clear
putexcel describe
現在の出力設定を表示します。
putexcel set "出力結果.xlsx"
putexcel describe
putexcel clear
putexcel clear
現在の出力設定をクリアします。
putexcel set "出力結果.xlsx"
putexcel describe
putexcel clear
作業フォルダに格納されている複数のCSVファイルを読み込んでdtaファイルとして保存し、1つのdtaファイルに結合します。
複数のCSVファイルには同一の列が格納されており、縦方向に結合して1つのファイルにまとめます。
インポート、マクロ変数、繰返し処理などのコマンドを使用します。
* 作業フォルダを指定します。
cd "ここにCSVファイルが格納されているパスを記述します。"
* マクロ変数にファイル名(CSVのみ)を格納します。
local filelist : dir . file "*.csv", respectcase
* 繰返し処理でファイルごとに処理を行います。
foreach file of local filelist {
* CSVファイルをインポートします。
import delimited "`file'", clear
* マクロ変数にファイル名を格納します。
local fname = subinstr("`file'",".csv","",.)
* dtaファイルとして保存します。
save "`fname'.dta"
* データセットをクリアします。
clear
* マクロ変数にファイル名(dtaのみ)を格納します。
local filelist : dir . file "*.dta", respectcase
* dtaファイルを縦方向に結合します。
append using `filelist'
* dtaファイルを保存します。
save "append_dataset.dta"
2つの回帰モデルを作成し、その結果を比較する表を生成して、Excelファイルに出力します。
Stataでは回帰モデルの結果を参照するには保存する操作が必要であり、estimates storeコマンドにより保存できます。
こちらの例では2つの回帰モデルですが、3つ以上のモデルも同様の操作で表を作成、出力できます。
* サンプルデータを読込みます。
webuse lbw
* 回帰モデル(1つ目)を作成します。
regress bwt age lwt
* 作成した回帰モデルを保存します。
estimates store model1
* 回帰モデル(2つ目)を作成します。
regress bwt age lwt i.smoke i.ptl
* 作成した回帰モデルを保存します。
estimates store model2
* 2つの回帰モデルの表を作成します。
etable, estimates(model1 model2) mstat(N) mstat(r2) column(index)
* 表をExcelファイルとしてエクスポートします。
collect export tworegs.xlsx
ヘッダー情報が複数行のデータをインポートするコマンド例です。
DPCデータ(Excelファイル)は厚生労働省のホームページよりダウンロードできます。
すべての列を文字列型で読み込んだあと、変数名と変数ラベルを編集し、特定の変数を数値型に変換します。
* はじめに、厚生労働省のホームページより
* (8)疾患別手術別集計_MDC01(Excel:2,991KB)
* をダウンロードして作業フォルダに格納します。
* 作業フォルダは、cdコマンドを実行すると表示されます。
* Excelファイルを読込みます。
import excel 001076045.xlsx, allstring
* 告示番号、通番、施設名の変数名と変数ラベルを設定します。
rename A kokuji
rename B tsuban
rename C shisetsu
label variable kokuji "告示番号"
label variable tsuban "通番"
label variable shisetsu "施設名"
* 変数名の一覧を取得します。
* 変数名と変数ラベルを編集します。
local cnamelist = "`r(varlist)'"
local n1 = ""
local n2 = ""
local n3 = ""
local n4 = ""
foreach cname of local cnamelist {
* 1,2行目の情報を取得します。
if `cname'[1] != "" {
local n1 = `cname'[1]
local n2 = `cname'[2]
* 3行目の情報を取得します。
if `cname'[3] == "件数" {
local n3 = "cnt"
else if `cname'[3] == "在院日数" {
local n3 = "day"
* 4行目の情報を取得します。
* 4行目の文字列が3文字以上の場合は変数名の末尾を"xx"とします。
if ustrlen(`cname'[4]) > 2 {
local n4 = "xx"
else {
local n4 = `cname'[4]
* 変数名と変数ラベルを設定します。
* 変数名の先頭に数値を使用できないため、先頭に"a"を付与します。
if "`n1'" != "" {
local labvar = `cname'[4]
label variable `cname' "`n1'_`n2'_`n3'_`labvar'"
rename `cname' a`n1'_`n3'_`n4'
* 不要な行を削除します。
drop if _n <= 4
* 施設名以外の変数を数値型へ変換します。
destring kokuji tsuban a*, replace force