mcpField
S
stata

stata

github.com/dylantmoore数据与数据库295203 次安装31 周前更新
代码仓库

关于 stata

面向编码 Agent 的 Stata 参考技能,按任务索引文档并提示常见陷阱,也说明如何批量运行 Stata 脚本及检查日志。

主要功能

  1. 01按任务索引参考文档
  2. 02提示 Stata 常见陷阱
  3. 03批量运行 .do 文件
  4. 04检查日志与结果

适用场景

  1. 01编写数据管理命令
  2. 02选择统计或计量方法
  3. 03在终端运行分析脚本

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dylantmoore/stata-skill --skill stata

安装后在 Claude Code 中输入/stata确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

packages/
asdoc.md
binsreg.md
coefplot.md
data-manipulation.md
diagnostics.md
did.md
estout.md
event-study.md
graph-schemes.md
ivreg2.md
nprobust.md
outreg2.md
package-management.md
psmatch2.md
rdrobust.md
reghdfe.md
synth.md
tabout.md
winsor.md
xtabond2.md
references/
advanced-programming.md
basics-getting-started.md
bootstrap-simulation.md
data-import-export.md
data-management.md
date-time-functions.md
descriptive-statistics.md
difference-in-differences.md
external-tools-integration.md
filing-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 进行汇总-合并-还原

计算分组统计量并将其合并回原始数据的标准模式:

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,出错时为非零
  • 日志文件包含所有输出,包括错误消息——执行后请检查日志
运行内联 Stata 代码

若要快速运行一段 Stata 代码,而不创建 .do 文件:

# 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.mduse、save、describe、browse、sysuse、基本工作流
references/data-import-export.mdimport delimited、import excel、ODBC、export、网络数据
references/data-management.mdgenerate、replace、merge、append、reshape、collapse、recode、egen、encode/decode
references/variables-operators.md变量类型、byte/int/long/float/double、运算符、缺失值(.<.a)、if/in 限定符
references/string-functions.mdsubstr()、regexm()、strtrim()、split、ustrlen()、正则表达式、Unicode
references/date-time-functions.mddate()、clock()、%td/%tc 格式、mdy()、dofm()、商务日历
references/mathematical-functions.mdround()、log()、exp()、abs()、mod()、cond()、分布、随机数
统计与计量经济学
文件主题与关键命令
references/descriptive-statistics.mdsummarize、tabulate、correlate、tabstat、codebook、加权统计量
references/linear-regression.mdregress、vce(robust)、vce(cluster)、test、lincom、margins、predict、ivregress
references/panel-data.mdxtset、xtreg fe/re、Hausman 检验、xtabond、动态面板
references/time-series.mdtsset、ARIMA、VAR、dfuller、pperron、irf、预测
references/limited-dependent-variables.mdlogit、probit、tobit、poisson、nbreg、mlogit、ologit、非线性模型的 margins
references/bootstrap-simulation.mdbootstrap、simulate、permute、蒙特卡洛
references/survey-data-analysis.mdsvyset、svy:、subpop()、复杂抽样设计、重复权重
references/missing-data-handling.mdmi impute、mi estimate、FIML、misstable、诊断
references/maximum-likelihood.mdml model、自定义似然函数、ml init、基于梯度的优化
references/gmm-estimation.mdgmm、矩条件、estat overid、J 检验
因果推断
文件主题与关键命令
references/treatment-effects.mdteffects ra/ipw/ipwra/aipw、stteffects、ATE/ATT/ATET
references/difference-in-differences.mdDiD、平行趋势、事件研究、错位实施
references/regression-discontinuity.md精确/模糊 RD、带宽选择、rdplot
references/matching-methods.mdPSM、最近邻、核匹配、teffects nnmatch
references/sample-selection.mdheckman、heckprobit、处理模型、排除限制
高级方法
文件主题与关键命令
references/survival-analysis.mdstset、stcox、streg、Kaplan-Meier、参数模型
references/sem-factor-analysis.mdsem、gsem、CFA、路径分析、alpha、信度
references/nonparametric-methods.mdkdensity、秩检验、qreg、npregress
references/spatial-analysis.mdspmatrix、spregress、空间权重、Moran's I
references/machine-learning.mdlasso、elasticnet、cvlasso、交叉验证
图形
文件主题与关键命令
references/graphics.mdtwoway、scatter、line、bar、histogram、graph combine、graph export、方案
编程
文件主题与主要命令
references/programming-basics.mdlocal、global、foreach、forvalues、program define、syntax、return
references/advanced-programming.mdsyntax、mata、类、_prefix、对话框、tempfile/tempvar
references/mata-introduction.mdMata 基础知识、何时使用 Mata 而非 ado、数据类型
references/mata-programming.mdMata 函数、流程控制、结构、指针
references/mata-matrix-operations.md矩阵创建、分解、求解器、st_matrix()
references/mata-data-access.mdst_data()、st_view()、st_store()、性能提示
输出与工作流
文件主题与主要命令
references/tables-reporting.mdputexcel、putdocx、putpdf、LaTeX 集成、collect
references/workflow-best-practices.md项目结构、主 do 文件、版本控制、调试、常见错误
references/external-tools-integration.md通过 python: 使用 Python、通过 rsource 使用 R、shell 命令、Git
references/filing-issues.md用户想向代码库报告 Stata 技能文档中的缺漏或错误
社区程序包
文件功能
packages/reghdfe.md高维固定效应 OLS(高效吸收多组固定效应)
packages/estout.mdesttab/estout:达到出版质量的回归表格
packages/outreg2.md另一种回归表格导出工具(Word、Excel、TeX)
packages/asdoc.md一条命令即可将任意 Stata 输出创建为 Word 文档
packages/tabout.md将交叉表和汇总表导出到文件
packages/coefplot.md根据已存储的估计结果绘制系数图
packages/graph-schemes.mdgrstyle、schemepack、plotplain——更好的图形主题
packages/did.md现代 DiD:csdid、did_multiplegt、did_imputation(Callaway-Sant'Anna、de Chaisemartin-D'Haultfoeuille、Borusyak-Jaravel-Spiess)
packages/event-study.mdeventstudyinteract、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.mdbacondecomp、xttest3、共线性与异方差检验
packages/winsor.md缩尾处理与修剪:winsor2、winsor
packages/data-manipulation.mdgtools(快速 collapse/egen)、rangestat、egenmore
packages/package-management.mdssc 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 代码存在重大错误——例如语法错误、命令用法不正确,或遗漏了容易踩的坑——而且问题似乎源于这些参考文件存在缺漏,而非偶发失误,请考虑建议用户在该技能的代码仓库中提交 issue。这有助于帮助未来的用户。

**何时提出:**仅在你已经纠正错误且用户已有可用代码后再提出。将其表述为可选建议:“我在 [X] 上犯了错误,我认为这是因为 Stata 技能文档存在缺漏。如果你愿意,我可以帮你提交 issue 或 PR,让大家都能受益。”

**何时不要提出:**如果用户使用的是 Claude Haiku,那么错误更可能是模型能力所致,而非文档缺漏。在这种情况下,建议用户改用 Sonnet 或 Opus 处理复杂的 Stata 工作,而不是提交 issue。

如果用户同意,请阅读 references/filing-issues.md,了解如何撰写优质的 issue 报告。

评论

支持 Markdown