pipeline
Classical end-to-end empirical analysis workflow in the traditional Python econometric stack — pandas + numpy + scipy +…
Comprehensive Stata reference for writing correct .do files, data management, econometrics, causal inference, graphics, Mata programming, and 20 community packages (reghdfe, estout, did, rdrobust, etc.). Covers syntax, options, gotchas, and idiomatic patterns. Use this skill
Claude Code
$ npx -y skills add brycewang-stanford/Auto-Empirical-Research-Skills --skill stata --agent claude-code
Codex
$ npx skills add brycewang-stanford/Auto-Empirical-Research-Skills --skill stata -a codex -y
Cursor
$ npx skills add brycewang-stanford/Auto-Empirical-Research-Skills --skill stata -a cursor -y
Gemini CLI
$ npx skills add brycewang-stanford/Auto-Empirical-Research-Skills --skill stata -a gemini-cli -y
GitHub Copilot
$ npx skills add brycewang-stanford/Auto-Empirical-Research-Skills --skill stata -a github-copilot -y
OpenCode
$ npx skills add brycewang-stanford/Auto-Empirical-Research-Skills --skill stata -a opencode -y
Windsurf
$ npx skills add brycewang-stanford/Auto-Empirical-Research-Skills --skill stata -a windsurf -y
name: stata description: > Comprehensive Stata reference for writing correct .do files, data management, econometrics, causal inference, graphics, Mata programming, and 20 community packages (reghdfe, estout, did, rdrobust, etc.). Covers syntax, options, gotchas, and idiomatic patterns. Use this skill whenever the user asks you to write, debug, or explain Stata code.
You have access to comprehensive Stata reference files. **Do not load all files.** Read only the 1-3 files relevant to the user's current task using the routing table below.
---
These are Stata-specific pitfalls that lead to silent bugs. Internalize these before writing any code.
Stata's `.` (and `.a`-`.z`) are **greater than all numbers**.
* 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)
`=` is assignment; `==` is comparison. Mixing them up is a syntax error or silent bug.
* WRONG — syntax error gen employed = 1 if status = 1 * RIGHT gen employed = 1 if status == 1
Locals use `` `name' `` (backtick + single-quote). Globals use `$name` or `${name}`. Forgetting the closing quote is the #1 macro bug.
local controls "age education income" regress wage `controls' // correct regress wage `controls // WRONG — missing closing quote regress wage 'controls' // WRONG — wrong quote characters
* 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)
Use `i.` for categorical, `c.` for continuous. Omitting `i.` treats categories as continuous.
* 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` creates new variables; `replace` modifies existing ones. Using `generate` on an existing variable name is an error.
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"
Never skip `tab _merge` — it costs nothing and is the only diagnostic you get when `assert` fails.
merge 1:1 id using other.dta tab _merge // ALWAYS tab before assert assert _merge == 3 // fails silently without tab output drop _merge
The standard pattern for computing group stats and merging them onto the original data:
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
For simple group means, `bysort group: egen avg_x = mean(x)` avoids the round-trip entirely.
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)A new estimation command **overwrites** previous `e()` results. Store them first:
regress y x1 x2 estimates store model1
---
Claude can execute Stata code by running `.do` files in batch mode from the terminal. This is how to run Stata non-interactively.
Stata on macOS is a `.app` bundle. The actual binary is inside it. Common locations:
# 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
If Stata isn't on `$PATH`, find it with: `mdfind -name "stata-mp" | grep MacOS`
# 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
To run a quick Stata snippet without creating a `.do` file:
# 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
## 🔥 力荐 · StatsPAI — Stata 与 R 的 Python 平替,为 AI Agent 而生 🔁 Stata / R 平替:reghdfe、csdid、rdrobust、synth、fixest、did 等常用命令在 Python 中一站式替代,一个 import statspai as sp 搞定 DID / RD / IV / SCM / DML / matching 🤖 面向 Agent 设计:结构化结果对象 + 内置 MCP Server,Claude / Codex
Classical end-to-end empirical analysis workflow in the traditional Python econometric stack — pandas + numpy + scipy +…
Use when the user asks to run a full empirical / causal analysis in Python — by default in the style of an applied economics…
Classical end-to-end empirical analysis workflow in the traditional Python econometric stack — pandas + numpy + scipy +…
Classical end-to-end empirical analysis workflow in the traditional Stata ecosystem — native Stata + reghdfe + ivreg2 + csdid +…
Classical end-to-end empirical analysis workflow in the modern tidyverse + econometrics R ecosystem — dplyr + tidyr + haven +…
Systematic writing framework for philosophy and interdisciplinary academic papers from optimized outline to submission-ready…
Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…