保姆级教程:用Stata的csdid命令搞定多期DID分析(附完整代码与结果解读) 计量实战用Stata的csdid命令实现多期DID全流程解析第一次接触多期DID时我被各种交乘项和事件窗口搞得晕头转向。直到发现csdid这个神器才明白原来政策评估可以如此优雅——不需要手动生成数十个交互项也不用担心错配时间窗口。本文将带你用一杯咖啡的时间掌握这个让《American Economic Review》作者都青睐的工具。1. 环境准备与数据校验1.1 安装关键命令组在Stata命令窗口逐行执行ssc install csdid, replace ssc install drdid, replace ssc install reghdfe, replace这三个命令构成了多期DID分析的黄金三角csdid核心估计命令drdid双重稳健估计引擎reghdfe高效处理固定效应若安装失败可尝试先运行adoupdate更新官方仓库索引1.2 数据结构诊断理想的多期DID数据应满足变量类型示例名称校验要点个体标识firm_id无重复面板需平衡时间标识year连续无间断处理时间treat_date未处理个体设为超大值(如9999)结果变量roa无异常离群值用以下命令快速排查tab treat_date, missing // 检查处理时间分布 xtset firm_id year // 验证面板结构2. 核心估计方法对比2.1 三种估计原理csdid提供的方法各有适用场景Double Robust (默认)csdid roa size leverage, ivar(firm_id) time(year) gvar(treat_date)优势同时正确设定倾向得分和结果模型时必然无偏成本计算量较大Outcome Regressioncsdid roa size leverage, ivar(firm_id) time(year) gvar(treat_date) method(reg)适用协变量与结果关系明确时风险模型误设会导致偏差Inverse Probability Weightingcsdid roa, ivar(firm_id) time(year) gvar(treat_date) method(ipw)适用处理机制已知但结果模型复杂时注意需要足够大的样本量2.2 对照组选择策略通过notyet选项切换对照组类型csdid roa, ivar(firm_id) time(year) gvar(treat_date) notyet默认从未处理个体为对照notyet使用尚未处理个体为对照关键区别平行趋势假设的实质不同3. 结果可视化与诊断3.1 事件研究图绘制estat event, window(-5 5) plot参数解读window(-5 5)显示处理前后各5期理想情况处理前系数在0附近波动处理后显著处理前趋势平行是DID有效性的关键证据3.2 异质性分析estat group, by(industry)输出各行业处理效应差异可用于识别政策影响的优势产业敏感行业无响应部门4. 实战陷阱与解决方案4.1 常见报错处理错误代码原因解决方案conformability时间变量格式不一致统一用year()等数值格式no observations对照组样本不足放宽notyet条件或扩大样本矩阵奇异共线性严重检查collin并删除冗余变量4.2 结果稳健性检验安慰剂检验提前虚构处理时间gen placebo_date treat_date - 3 csdid roa, ivar(firm_id) time(year) gvar(placebo_date)带宽检验调整事件窗口范围模型对比三种方法结果一致性5. 结果报告规范5.1 三线表示例变量(1) DR(2) REG(3) IPWATT0.125***0.118**0.131***(0.042)(0.047)(0.039)样本量12,54812,54812,5485.2 文字解读要点处理效应经济意义如政策使企业ROA提升12.5%统计显著性标注***/**/*对应1%/5%/10%水平异质性发现如高科技行业响应更强烈记得在分析最后保留完整的do文件* 保存分析日志 log using DID_analysis.smcl, replace * 记录软件版本 version 17 * 输出估计命令 csdid roa size leverage, ivar(firm_id) time(year) gvar(treat_date) log close