stata について
コーディングエージェント向けの Stata リファレンススキルです。タスク別の資料案内と注意点に加え、Stata スクリプトのバッチ実行やログ確認方法をまとめています。
主な機能
- 01タスク別の資料案内
- 02Stata の注意点の解説
- 03.do ファイルのバッチ実行
- 04ログと結果の確認
活用シーン
- 01データ管理コマンドの作成
- 02統計・計量手法の選択
- 03ターミナルでの分析スクリプト実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dylantmoore/ stata-skill --skill stataインストール後、Claude Code で/stataを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
packages/asdoc.mdbinsreg.mdcoefplot.mddata-manipulation.mddiagnostics.mddid.mdestout.mdevent-study.mdgraph-schemes.mdivreg2.mdnprobust.mdoutreg2.mdpackage-management.mdpsmatch2.mdrdrobust.mdreghdfe.mdsynth.mdtabout.mdwinsor.mdxtabond2.mdreferences/advanced-programming.mdbasics-getting-started.mdbootstrap-simulation.mddata-import-export.mddata-management.mddate-time-functions.mddescriptive-statistics.mddifference-in-differences.mdexternal-tools-integration.mdfiling-issues.md詳細
Stata スキル
Stata の包括的なリファレンスファイルを利用できます。すべてのファイルを読み込まないでください。 以下のルーティングテーブルを使い、ユーザーの現在のタスクに関連するファイルを1~3個だけ読んでください。
重大な注意点
これらは、気づかないうちにバグを引き起こす Stata 固有の落とし穴です。コードを書く前に、必ず把握してください。
欠損値は +Infinity にソートされます
Stata の .(および .a~.z)はすべての数値より大きい値です。
* WRONG — includes observations where income is missing!
gen high_income = (income > 50000)
* RIGHT
gen high_income = (income > 50000) if !missing(income)
* WRONG — missing ages appear in this list
list if age > 60
* RIGHT
list if age > 60 & !missing(age)
= と ==
= は代入、== は比較です。取り違えると、構文エラーまたは気づきにくいバグになります。
* WRONG — syntax error
gen employed = 1 if status = 1
* RIGHT
gen employed = 1 if status == 1
ローカルマクロの構文
ローカルマクロには `name'(バッククォート + シングルクォート)を使います。グローバルマクロには $name または ${name} を使います。
閉じる引用符を忘れることが、マクロ関連バグの最大の原因です。
local controls "age education income"
regress wage `controls' // correct
regress wage `controls // WRONG — missing closing quote
regress wage 'controls' // WRONG — wrong quote characters
by の前にはソートが必要です(bysort を使用)
* WRONG — error if data not sorted by id
by id: gen first = (_n == 1)
* RIGHT — bysort sorts automatically
bysort id: gen first = (_n == 1)
* Also RIGHT — explicit sort
sort id
by id: gen first = (_n == 1)
因子変数の表記法(i. と c.)
カテゴリ変数には i.、連続変数には c. を使います。i. を省略すると、カテゴリが連続変数として扱われます。
* WRONG — treats race as continuous (e.g., race=3 has 3x effect of race=1)
regress wage race education
* RIGHT — creates dummies automatically
regress wage i.race education
* Interactions
regress wage i.race##c.education // full interaction
regress wage i.race#c.education // interaction only (no main effects)
generate と replace
generate は新しい変数を作成し、replace は既存の変数を変更します。すでに存在する変数名に対して generate を使うとエラーになります。
gen x = 1
gen x = 2 // ERROR: x already defined
replace x = 2 // correct
文字列の比較では大文字と小文字が区別されます
* May miss "Male", "MALE", etc.
keep if gender == "male"
* Safer
keep if lower(gender) == "male"
merge の後は必ず _merge を確認してください
tab _merge を省略しないでください。コストはかからず、assert が失敗したときに得られる唯一の診断情報です。
merge 1:1 id using other.dta
tab _merge // ALWAYS tab before assert
assert _merge == 3 // fails silently without tab output
drop _merge
preserve / restore と tempfile を使った Collapse-Merge-Back
グループ統計量を計算し、元のデータにマージする標準的なパターンです。
tempfile stats
preserve
collapse (mean) avg_x=x, by(group)
save `stats'
restore
merge m:1 group using `stats'
tab _merge
assert _merge == 3
drop _merge
単純なグループ平均であれば、bysort group: egen avg_x = mean(x) を使うことで、往復処理を完全に避けられます。
重みは互換性がありません
fweight— 度数重み(複製)aweight— 分析/回帰重み(逆分散)pweight— 確率/標本抽出重み(調査データ向け。ロバスト標準誤差を適用)iweight— 重要度重み(ほとんど使用されません)
capture はエラーを握りつぶします
capture some_command
if _rc != 0 {
di as error "Failed with code: " _rc
exit _rc
}
行の継続には /// を使います
regress y x1 x2 x3 ///
x4 x5 x6, ///
vce(robust)
保存された結果:r()、e()、s()
r()— r クラスのコマンド(summarize、tabulate など)e()— e クラスのコマンド(regress、logit などの推定)s()— s クラスのコマンド(解析)
新しい推定コマンドを実行すると、以前の e() の結果は上書きされます。先に保存してください。
regress y x1 x2
estimates store model1
コマンドラインから Stata を実行する
Claude は、ターミナルからバッチモードで .do ファイルを実行することで、Stata コードを実行できます。Stata を非対話形式で実行する方法は次のとおりです。
Stata バイナリを探す
macOS 版 Stata は .app バンドルです。実際のバイナリはその中にあります。一般的な場所は次のとおりです。
# Stata 18 / StataNow (most common)
/Applications/Stata/StataMP.app/Contents/MacOS/stata-mp
/Applications/StataNow/StataMP.app/Contents/MacOS/stata-mp
# Other editions (SE, BE)
/Applications/Stata/StataSE.app/Contents/MacOS/stata-se
/Applications/Stata/StataBE.app/Contents/MacOS/stata-be
Stata が $PATH にない場合は、mdfind -name "stata-mp" | grep MacOS で探してください。
バッチモード(-b)
# Run a .do file in batch mode — output goes to <filename>.log
/Applications/Stata/StataMP.app/Contents/MacOS/stata-mp -b do analysis.do
# If stata-mp is on PATH (e.g., via symlink or alias):
stata-mp -b do analysis.do
-b= バッチモード(非対話形式、GUI なし)- 出力(Stata が表示するすべての内容)は、作業ディレクトリの
analysis.logに書き込まれます - 終了コードは成功時に 0、エラー時は 0 以外です
- ログファイルにはエラーメッセージを含むすべての出力が記録されます。実行後に確認してください
Stata コードをインラインで実行する
.do ファイルを作成せずに、簡単な Stata コードを実行するには、次のようにします。
# Write a temp .do file and run it
cat > /tmp/stata_run.do << 'EOF'
sysuse auto, clear
summarize price mpg
EOF
stata-mp -b do /tmp/stata_run.do
cat /tmp/stata_run.log
結果を確認する
# Check if it succeeded
stata-mp -b do tests/run_tests.do && echo "SUCCESS" || echo "FAILED"
# Search the log for pass/fail
grep -E "PASS|FAIL|error|r\([0-9]+\)" run_tests.log
ヒント
- バッチスクリプトの先頭に
clear allを置く — バッチモードは新しい Stata セッションで開始しますが、clear allを使えば、同じセッションで以前に実行した際の古い状態が残らないようにできます。 set more off— Stata が--more--プロンプトで一時停止するのを防ぎます(バッチモードでは致命的です)。- ログファイルは警告なしで上書きされます —
analysis.doは、現在のディレクトリに常にanalysis.logを書き込みます。複数の.doファイルを実行する場合は、正しいログを確認してください。 - 作業ディレクトリ — Stata の作業ディレクトリは、
.doファイルの保存場所ではなく、コマンドを実行した場所です。必要に応じて、.doファイル内でcdを使うか、絶対パスを指定してください。
ルーティングテーブル
ユーザーのタスクに関連するファイルだけを読んでください。パスはこの SKILL.md ファイルからの相対パスです。
データ操作
| ファイル | トピックと主なコマンド |
|---|---|
references/basics-getting-started.md | use、save、describe、browse、sysuse、基本的なワークフロー |
references/data-import-export.md | import delimited、import excel、ODBC、export、Web データ |
references/data-management.md | generate、replace、merge、append、reshape、collapse、recode、egen、encode/decode |
references/variables-operators.md | 変数の型、byte/int/long/float/double、演算子、欠損値(.<.a)、if/in 修飾子 |
references/string-functions.md | substr()、regexm()、strtrim()、split、ustrlen()、正規表現、Unicode |
references/date-time-functions.md | date()、clock()、%td/%tc 形式、mdy()、dofm()、営業日カレンダー |
references/mathematical-functions.md | round()、log()、exp()、abs()、mod()、cond()、分布、乱数 |
統計と計量経済学
| ファイル | トピックと主なコマンド |
|---|---|
references/descriptive-statistics.md | summarize、tabulate、correlate、tabstat、codebook、加重統計 |
references/linear-regression.md | regress、vce(robust)、vce(cluster)、test、lincom、margins、predict、ivregress |
references/panel-data.md | xtset、xtreg fe/re、Hausman 検定、xtabond、動学パネル |
references/time-series.md | tsset、ARIMA、VAR、dfuller、pperron、irf、予測 |
references/limited-dependent-variables.md | logit、probit、tobit、poisson、nbreg、mlogit、ologit、非線形モデルの margins |
references/bootstrap-simulation.md | bootstrap、simulate、permute、モンテカルロ法 |
references/survey-data-analysis.md | svyset、svy:、subpop()、複雑な調査設計、反復ウェイト |
references/missing-data-handling.md | mi impute、mi estimate、FIML、misstable、診断 |
references/maximum-likelihood.md | ml model、カスタム尤度関数、ml init、勾配ベースの最適化 |
references/gmm-estimation.md | gmm、モーメント条件、estat overid、J 検定 |
因果推論
| ファイル | トピックと主なコマンド |
|---|---|
references/treatment-effects.md | teffects ra/ipw/ipwra/aipw、stteffects、ATE/ATT/ATET |
references/difference-in-differences.md | DiD、平行トレンド、イベントスタディ、段階的導入 |
references/regression-discontinuity.md | シャープ/ファジー RD、バンド幅の選択、rdplot |
references/matching-methods.md | PSM、最近傍法、カーネルマッチング、teffects nnmatch |
references/sample-selection.md | heckman、heckprobit、処置モデル、除外制約 |
高度な手法
| ファイル | トピックと主なコマンド |
|---|---|
references/survival-analysis.md | stset、stcox、streg、Kaplan-Meier、パラメトリックモデル |
references/sem-factor-analysis.md | sem、gsem、CFA、パス解析、alpha、信頼性 |
references/nonparametric-methods.md | kdensity、順位検定、qreg、npregress |
references/spatial-analysis.md | spmatrix、spregress、空間ウェイト、Moran の I |
references/machine-learning.md | lasso、elasticnet、cvlasso、交差検証 |
グラフィックス
| ファイル | トピックと主なコマンド |
|---|---|
references/graphics.md | twoway、scatter、line、bar、histogram、graph combine、graph export、スキーム |
プログラミング
| ファイル | トピックと主なコマンド |
|---|---|
references/programming-basics.md | local、global、foreach、forvalues、program define、syntax、return |
references/advanced-programming.md | syntax、mata、クラス、_prefix、ダイアログボックス、tempfile/tempvar |
references/mata-introduction.md | Mata の基本、Mata と ado の使い分け、データ型 |
references/mata-programming.md | Mata の関数、フロー制御、構造体、ポインター |
references/mata-matrix-operations.md | 行列の作成、分解、ソルバー、st_matrix() |
references/mata-data-access.md | st_data()、st_view()、st_store()、パフォーマンスのヒント |
出力とワークフロー
| ファイル | トピックと主なコマンド |
|---|---|
references/tables-reporting.md | putexcel、putdocx、putpdf、LaTeX との統合、collect |
references/workflow-best-practices.md | プロジェクト構成、マスタ do ファイル、バージョン管理、デバッグ、よくある間違い |
references/external-tools-integration.md | python: による Python、rsource による R、シェルコマンド、Git |
references/filing-issues.md | Stata スキルのドキュメントに関する不足や誤りをリポジトリに報告したい場合 |
コミュニティパッケージ
| ファイル | 機能 |
|---|---|
packages/reghdfe.md | 高次元固定効果 OLS(複数の固定効果セットを効率的に吸収) |
packages/estout.md | esttab/estout:論文掲載品質の回帰表 |
packages/outreg2.md | 回帰表の別形式のエクスポーター(Word、Excel、TeX) |
packages/asdoc.md | Stata のあらゆる出力を 1 つのコマンドで Word 文書に作成 |
packages/tabout.md | クロス集計表と要約表をファイルに出力 |
packages/coefplot.md | 保存済み推定結果から係数プロットを作成 |
packages/graph-schemes.md | grstyle、schemepack、plotplain — グラフのテーマを改善 |
packages/did.md | 最新の DiD:csdid、did_multiplegt、did_imputation(Callaway-Sant'Anna、de Chaisemartin-D'Haultfoeuille、Borusyak-Jaravel-Spiess) |
packages/event-study.md | eventstudyinteract、eventdd — イベントスタディ推定量 |
packages/rdrobust.md | 最適バンド幅を用いたロバストな RD 推定(rdrobust、rdplot、rdbwselect) |
packages/psmatch2.md | 傾向スコアマッチング(最近傍法、カーネル法、半径法) |
packages/synth.md | 合成コントロール法(synth、synth_runner) |
packages/ivreg2.md | 拡張 IV/2SLS:追加の診断機能を備えた ivreg2、xtivreg2 |
packages/xtabond2.md | 動学パネル GMM(Arellano-Bond/Blundell-Bond) |
packages/binsreg.md | 信頼区間付きビン散布図(binsreg、binstest) |
packages/nprobust.md | ノンパラメトリックなカーネル推定と推論 |
packages/diagnostics.md | bacondecomp、xttest3、共線性検定、不均一分散検定 |
packages/winsor.md | ウィンザー化とトリミング:winsor2、winsor |
packages/data-manipulation.md | gtools(高速な collapse/egen)、rangestat、egenmore |
packages/package-management.md | ssc install、net install、ado update、パッケージの検索 |
よくあるパターン
回帰表のワークフロー
* Estimate models
eststo clear
eststo: regress y x1 x2, vce(robust)
eststo: regress y x1 x2 x3, vce(robust)
eststo: regress y x1 x2 x3 x4, vce(cluster id)
* Export table
esttab using "results.tex", replace ///
se star(* 0.10 ** 0.05 *** 0.01) ///
label booktabs ///
title("Main Results") ///
mtitles("(1)" "(2)" "(3)")
パネルデータのセットアップ
xtset panelid timevar // declare panel structure
xtdescribe // check balance
xtsum outcome // within/between variation
* Fixed effects
xtreg y x1 x2, fe vce(cluster panelid)
* Or with reghdfe (preferred for multiple FE)
reghdfe y x1 x2, absorb(panelid timevar) vce(cluster panelid)
差の差法
* Classic 2x2 DiD
gen post = (year >= treatment_year)
gen treat_post = treated * post
regress y treated post treat_post, vce(cluster id)
* Event study (uniform timing — must interact with treatment group)
reghdfe y ib(-1).rel_time#1.treated, absorb(id year) vce(cluster id)
testparm *.rel_time#1.treated // pre-trend test
* Modern staggered DiD (Callaway & Sant'Anna)
csdid y x1 x2, ivar(id) time(year) gvar(first_treat) agg(event)
csdid_plot
グラフのエクスポート
* Publication-quality scatter with fit line
twoway (scatter y x, mcolor(navy%50) msize(small)) ///
(lfit y x, lcolor(cranberry) lwidth(medthick)), ///
title("Title Here") ///
xtitle("X Label") ytitle("Y Label") ///
legend(off) scheme(s2color)
graph export "figure1.pdf", replace as(pdf)
graph export "figure1.png", replace as(png) width(2400)
データクリーニングのパイプライン
* Load and inspect
import delimited "raw_data.csv", clear varnames(1)
describe
codebook, compact
* Clean
rename *, lower // lowercase all varnames
destring income, replace force // convert string to numeric
replace income = . if income < 0
* Label
label variable income "Annual household income (USD)"
label define yesno 0 "No" 1 "Yes"
label values employed yesno
* Save
compress
save "clean_data.dta", replace
多重代入
mi set mlong
mi register imputed income education
mi impute chained (regress) income (ologit) education = age i.gender, add(20) rseed(12345)
mi estimate: regress wage income education age i.gender
このスキルの改善にご協力ください
重大なエラー(構文の誤り、コマンドの誤った使い方、見落としていた注意点など)を含む Stata コードを作成し、その原因が単発のミスではなく、これらのリファレンスファイルの不足にあると思われる場合は、スキルのリポジトリへのイシュー登録をユーザーに提案することを検討してください。これは、今後のユーザーの役に立ちます。
提案するタイミング: エラーをすでに修正し、ユーザーが動作するコードを使える状態になってからに限ります。任意の提案として、次のように伝えてください。「[X] について誤りがありました。Stata スキルのドキュメントに不足があることが原因だと思います。ご希望であれば、誰もが利用できるように修正するため、イシューまたは PR の作成をお手伝いできます。」
提案しないタイミング: ユーザーが Claude Haiku を使用している場合、エラーはドキュメントの不足ではなく、モデルの能力に起因する可能性が高いです。その場合は、イシューを登録するのではなく、複雑な Stata の作業には Sonnet または Opus を試すよう提案してください。
ユーザーが同意した場合は、適切なイシューレポートの書き方について、references/filing-issues.md を読んでください。