大家好,做实证研究的同学,经常需要一套系统、规范的Stata代码模板。今天我把从数据准备到最终结果输出的整个流程完整整理出来,分享给大家。这套模板覆盖了OLS、面板数据、DID、PSM、空间计量等主流方法,希望能帮助你在实证分析中少走弯路。
一、数据准备阶段
1. 数据导入与管理
首先我们需要把数据导入Stata,常见格式有Excel、CSV和DTA文件。
METHODS • CODE • SCRIPT * 导入Excel数据import excel "data.xlsx", firstrow clear* 导入CSV数据import delimited "data.csv", clear* 导入DTA数据(Stata自有格式)use"data.dta", clear* 设置工作目录cd"D:\Project\Data"* 开启日志文件,记录所有操作log using "analysis.log", replace text
2. 数据预处理
数据清理是实证分析的基础,我们通常要做变量生成、缺失值处理、异常值处理等工作。
METHODS • CODE • SCRIPT * 生成新变量gen lnGDP = ln(GDP)gen GDP_growth = (GDP - L.GDP) / L.GDP * 100* 重命名变量rename oldname newname* 缺失值处理dropifmissing(Y, X1, X2) // 删除关键变量缺失的观测replace X1 = 0 ifmissing(X1) // 将缺失值填补为0* 异常值处理(3σ原则)egen mean_X = mean(X1)egen sd_X = sd(X1)dropifabs(X1 - mean_X) > 3*sd_X* 缩尾处理(1%水平,推荐使用winsor2命令)winsor2 X1 X2 X3, replace cuts(1 99)* 生成哑变量tab industry, gen(ind_)* 生成滞后项gen L1_X = L.X1gen L2_X = L2.X1* 生成交互项gen interaction = X1 * X2* 变量标准化egen z_X1 = std(X1)
3. 数据结构设置
面板数据和时间序列分析前必须正确设置数据结构。
METHODS • CODE • SCRIPT * 设定面板数据(个体+时间)xtset firm_id year* 设定时间序列tsset year* 横向合并数据(1:1匹配)merge 1:1 id year using "data2.dta"keepif _merge == 3drop _merge* 纵向追加数据append using "data2.dta"
二、初步分析阶段
4. 描述性统计
METHODS • CODE • SCRIPT * 基本统计量(含详细信息)sum Y X1 X2 X3, detail* 分组统计bysort group: sum Y X1 X2* 频率表tab industry* 相关系数矩阵(带显著性星号)pwcorr Y X1 X2 X3, star(0.05)
5. 数据可视化
METHODS • CODE • SCRIPT * 直方图(带正态分布曲线)histogram Y, normal* 散点图scatter Y X1* 矩阵散点图graphmatrix Y X1 X2 X3* 回归拟合图twoway (scatter Y X1) (lfit Y X1)* 系数图coefplot, drop(_cons) xline(0)* 时间趋势图twowayline Y year
6. 基础统计检验
METHODS • CODE • SCRIPT * 双样本t检验ttest Y, by(group)* 方差齐性F检验sdtest Y, by(group)* 卡方检验tab group outcome, chi2* 正态性检验swilk Y
三、核心建模阶段
7. OLS回归及诊断
METHODS • CODE • SCRIPT * 一元线性回归reg Y X1* 多元线性回归(加入固定效应)reg Y X1 X2 X3 i.year i.industry* 稳健标准误reg Y X1 X2 X3, robust* 聚类标准误(按个体聚类)reg Y X1 X2 X3, cluster(firm_id)* 多重共线性检验(VIF)reg Y X1 X2 X3vif* 异方差检验reg Y X1 X2 X3estathettest// White检验estatimtest// BP检验* 自相关检验(DW检验)reg Y X1 X2 X3estat dwatson* 模型设定检验(RESET检验)reg Y X1 X2 X3estatovtest
8. 离散选择模型
METHODS • CODE • SCRIPT * Logit回归logit Y X1 X2 X3* Probit回归probit Y X1 X2 X3* 计算边际效应margins, dydx(*)* 有序Logitologit Y X1 X2 X3* 多项Logit(以0为基准组)mlogit Y X1 X2 X3, base(0)
9. 受限因变量模型
METHODS • CODE • SCRIPT * Tobit模型(左截断0,右截断100)tobit Y X1 X2 X3, ll(0) ul(100)* Heckman两阶段选择模型heckman Y X1 X2 X3, select(Z1 Z2 Z3) twostep
10. 计数模型
METHODS • CODE • SCRIPT * 泊松回归poisson Y X1 X2 X3* 负二项回归nbreg Y X1 X2 X3
11. 分位数回归
METHODS • CODE • SCRIPT * 中位数回归(0.5分位)qreg Y X1 X2 X3, quantile(0.5)* 多分位数回归对比sqreg Y X1 X2 X3, q(0.25 0.5 0.75)
12. 面板数据模型
METHODS • CODE • SCRIPT * 混合OLSreg Y X1 X2 X3* 固定效应模型xtreg Y X1 X2 X3, fe* 随机效应模型xtreg Y X1 X2 X3, re* 双向固定效应(个体+时间)xtreg Y X1 X2 X3 i.year, fe* 豪斯曼检验(选择固定效应还是随机效应)xtreg Y X1 X2 X3, feestimates store fextreg Y X1 X2 X3, reestimates store rehausman fe re
13. 工具变量法(2SLS)
METHODS • CODE • SCRIPT * 两阶段最小二乘法ivregress 2sls Y X2 X3 (X1 = Z1 Z2), first* 弱工具变量检验estat firststage* 过度识别检验estat overid* 内生性检验estat endogenous
14. 动态面板GMM
METHODS • CODE • SCRIPT * 差分GMMxtabond Y L.Y X1 X2 X3, lags(1) twostep* 系统GMM(推荐使用xtabond2)xtabond2 Y L.Y X1 X2 X3, gmm(L.Y, lag(2 4)) iv(X2 X3) robust twostep
15. 双重差分法(DID)
METHODS • CODE • SCRIPT * 传统DID(2×2)reg Y treat##post X1 X2 i.year, cluster(id)* 多期DID(双向固定效应)xtreg Y treat X1 X2 i.year, fe cluster(id)* 平行趋势检验reg Y treat##ib2015.year X1 X2, cluster(id)coefplot, keep(*.year#1.treat) vertical yline(0)* 事件研究法gen rel_time = year - treat_yearreg Y ib(-1).rel_time X1 X2 i.year i.id, cluster(id)
16. 倾向得分匹配(PSM)
METHODS • CODE • SCRIPT * PSM估计倾向得分pscore treat X1 X2 X3, pscore(pscore_var)* 平衡性检验pstest X1 X2 X3, treated(treat)* 近邻匹配psmatch2 treat, outcome(Y) pscore(pscore_var) neighbor(1) common* 核匹配psmatch2 treat, outcome(Y) pscore(pscore_var) kernel common
17. 断点回归(RDD)
METHODS • CODE • SCRIPT * 精确RDD(推荐使用rdrobust)rdrobust Y running_var, c(cutoff)* 最优带宽选择rdbwselect Y running_var, c(cutoff)* McCrary密度检验DCdensity running_var, breakpoint(cutoff)
18. 门槛回归
METHODS • CODE • SCRIPT * 单门槛模型xthreg Y X1 X2, rx(threshold_var) qx(X1) thnum(1) grid(400) bs(300)* 双门槛模型xthreg Y X1 X2, rx(threshold_var) qx(X1) thnum(2) grid(400) bs(300)
19. 空间计量模型
METHODS • CODE • SCRIPT * 创建空间权重矩阵(需提前准备)spmat import W using "weight_matrix.txt", replace* Moran's I检验spatgsa Y, weights(W) moran* 空间滞后模型(SAR)spregress Y X1 X2 X3, ml dvarlag(W)* 空间误差模型(SEM)spregress Y X1 X2 X3, ml errorlag(W)* 空间杜宾模型(SDM)spregress Y X1 X2 X3, ml dvarlag(W) ivarlag(W: X1 X2 X3)* 空间效应分解estat impact
20. 时间序列模型
METHODS • CODE • SCRIPT * ADF单位根检验dfuller Y, lags(2)* Johansen协整检验vecrank Y X* VAR模型var Y X, lags(1/2)* 格兰杰因果检验var Y X, lags(1/2)vargranger
四、稳健性与结果输出
21. 调节效应
METHODS • CODE • SCRIPT * 交互项回归(调节效应)reg Y c.X1##c.M X2 X3* 简单斜率检验margins, dydx(X1) at(M=(1 5 10))marginsplot
22. 中介效应
METHODS • CODE • SCRIPT * 逐步回归法(经典三步法)reg Y X control_varsregM X control_varsreg Y X M control_vars* Bootstrap中介效应检验bootstrap, reps(1000): sgmediation Y, mv(M) iv(X) cv(control_vars)
23. 稳健性检验
我们通常从多个维度进行稳健性检验:
METHODS • CODE • SCRIPT * 替换核心解释变量reg Y X1_alternative X2 X3 i.year i.id, cluster(id)* 替换被解释变量reg Y_alternative X1 X2 X3 i.year i.id, cluster(id)* 改变样本范围reg Y X1 X2 X3 if year >= 2010 & year <= 2020* 调整缩尾比例winsor2 X1, replace cuts(5 95)reg Y X1 X2 X3
24. 结果导出
METHODS • CODE • SCRIPT * 安装导出命令(只需安装一次)ssc install estoutssc install outreg2* 导出多模型回归结果到Word(推荐esttab)reg Y X1 X2 X3estimates store m1xtreg Y X1 X2 X3, feestimates store m2esttab m1 m2 using "results.rtf", /// b(3) se(3) r2 ar2 scalar(N) /// star(* 0.1 ** 0.05 *** 0.01) /// mtitles("OLS""FE") replace
25. 循环与批量处理
当我们需要对多个变量或多个模型重复操作时,循环非常实用。
METHODS • CODE • SCRIPT * foreach循环(对多个变量回归)foreachvarin X1 X2 X3 {reg Y `var'estimates store model_`var'}* forvalues循环(分年回归)forvalues i = 2010/2020 {reg Y X1 X2 X3 if year == `i'estimates store year_`i'}* 批量回归多个被解释变量foreach outcome in Y1 Y2 Y3 {reg`outcome' X1 X2 X3 outreg2 using "results_`outcome'.doc", replace}
这套模板基本涵盖了实证论文从数据清洗到结果呈现的完整流程。我在实际研究中会把这些代码整理成一个do文件,分模块注释清楚。
建议大家根据自己的研究设计,灵活组合使用这些模板。核心是保证每一步都有清晰的逻辑和合理的经济学解释,同时做好各种稳健性检验,让结果经得起推敲。

夜雨聆风