使用Stata进行双重差分的操作及代码(含注释,可直接复制到命令窗口)

操作步骤及Stata代码:
一、准备工作:
1 xtset ID Year #设置面板数据
2 gen Time = (Year >= 2015)&!missing(Year) #创建时间虚拟变量
3 gen Treatment = (ID <= 108)&!missing(ID) #创建政策虚拟变量
二、基准回归:
方法1:自带命令diff
4 ssc install diff #利用Stata自带的命令去下载diff
5 diff Contracts ,t(Treatment) p(Time)
diff Income ,t(Treatment) p(Time)
diff Averageincome ,t(Treatment) p(Time) #三个因变量分别做基准回归
6 diff Contracts ,t(Treatment) p(Time) cov( RDpersonnel Seniortitle RDfunds Governmentfunds Enterpriseentrustment Papers Patentapplications Patentlicenses )
diff Income ,t(Treatment) p(Time) cov( RDpersonnel Seniortitle RDfunds Governmentfunds Enterpriseentrustment Papers Patentapplications Patentlicenses )
diff Averageincome ,t(Treatment) p(Time) cov( RDpersonnel Seniortitle RDfunds Governmentfunds Enterpriseentrustment Papers Patentapplications Patentlicenses ) #加入控制变量后三个因变量的基准回归
7 robust report bs reps(100) #展示控制变量,抽取100次
方法2:OLS回归
8 gen DID=Time*Treatment #构建did交互项
9 reg Contracts DID Time Treatment RDpersonnel Seniortitle RDfunds Governmentfunds Enterpriseentrustment Papers Patentapplications Patentlicenses ,r
reg Income DID Time Treatment RDpersonnel Seniortitle RDfunds Governmentfunds Enterpriseentrustment Papers Patentapplications Patentlicenses ,r
reg Averageincome DID Time Treatment RDpersonnel Seniortitle RDfunds Governmentfunds Enterpriseentrustment Papers Patentapplications Patentlicenses ,r
方法3:固定效应
10 xtreg Contracts DID Time Treatment RDpersonnel Seniortitle RDfunds Governmentfunds Enterpriseentrustment Papers Patentapplications Patentlicenses ,fe r
11 xtreg Contracts DID RDpersonnel Seniortitle RDfunds Governmentfunds Enterpriseentrustment Papers Patentapplications Patentlicenses i.Year, fe r #实际操作中一般用该方式构建个体固定效应(fe)、时间固定效应(i.Year)
三、描述性统计:
12 describe #非必要,可查看数据集信息
方法1:
13 summarize #后可加具体变量名称,不加变量名称默认对全部变量进行描述性分析
14 ssc install outreg2 #安装outreg2命令,可导出结果到word
outreg2 using 描述性统计结果1.doc, replace sum(log) title(Decriptive statistics)
方法2:
15 tabstat y x,s(N mean p50 sd min max) f(%12.3f) c(s) #s后括号可根据需要增减相应统计量
16 ssc install logout #安装logout命令,可导出结果到word
17 logout,save(描述性统计结果2)word replace:tabstat y x ,s(N mean p50 sd min max range) f(%12.3f) c(s)
四、平行趋势检验:
方法1:画出每年均值趋势图
18 gen Treat= Contracts if ID <= 108 #构造实验组变量
19 gen Control= Contracts if ID >108 #构造对照组变量
20 bysort Year: egen tTreat= mean(Treat)
bysort Year: egen cControl=mean(Control) #按年份分组并求每年均值
21 duplicates drop Year,force #删除重复值,只保留一年一个数据即可
22 scatter tTreat Year,c(1)|| scatter cControl Year,c(1) #自动画图
方法2:回归
23 diff Contracts ,t(Treatment) p(Time) cov(RDpersonnel Seniortitle RDfunds Governmentfunds Enterpriseentrustment Papers Patentapplications Patentlicenses) robust report bs reps(100) test #两组的被解释变量出现显著差异、其他控制变量不显著表示被解释变量的差异是由于自变量(即政策)而产生的
方法3:
24 clear
25 tab Year,gen(yrdum) #构建一个时间的虚拟变量
26 forvalues v=2/8{
gen Treatment`v' =yrdum`v'* Treatment
} #构建变量v,2-8年的交乘项(注意代码写在不同的行,否则会出现r(198)错误)
27 xtreg Contracts Time Treatment Treatment2 Treatment3 Treatment4 Treatment5 Treatment6 Treatment7 Treatment8 i.Year, fe #回归
28 est sto reg
29 coefplot reg, keep( Treatment2 Treatment3 Treatment4 Treatment5 Treatment6 Treatment7 Treatment8 ) vertical recast(connect) yline(0) #画图,置信区间均跨过零线说明系数不显著,没有明显差异
五、分位数回归:
30 diff Contracts ,t(Treatment) p(Time) cov( RDpersonnel Seniortitle RDfunds Governmentfunds Enterpriseentrustment Papers Patentapplications Patentlicenses ) qdid(0.5) report # qdid(0.5)指did做50%分位数回归,report可报告变量
六、安慰剂检验:
31 ssc install reghdfe #安装双重差分直接命令
32 cap erase "simulations.dta" #覆盖文件,便于之后保存
33 permute DID beta = _b[DID] se = _se[DID] df = e(df_r), reps(500) seed(100) saving("simulations.dta"):reghdfe Contracts DID, RDpersonnel Seniortitle RDfunds Governmentfunds Enterpriseentrustment Papers Patentapplications Patentlicenses absorb( ID Year) vce(robust) #抽取100个作为伪实验组,随机抽取500次