使用Stata進行雙重差分的操作及代碼(含注釋,可直接復制到命令窗口)

操作步驟及Stata代碼:
一、準備工作:
1 xtset ID Year #設置面板數(shù)據(jù)
2 gen Time = (Year >= 2015)&!missing(Year) #創(chuàng)建時間虛擬變量
3 gen Treatment = (ID <= 108)&!missing(ID)?#創(chuàng)建政策虛擬變量
二、基準回歸:
方法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)
三、描述性統(tǒng)計:
12 describe #非必要,可查看數(shù)據(jù)集信息
方法1:
13 summarize #后可加具體變量名稱,不加變量名稱默認對全部變量進行描述性分析
14 ssc install outreg2 #安裝outreg2命令,可導出結果到word
outreg2 using 描述性統(tǒng)計結果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后括號可根據(jù)需要增減相應統(tǒng)計量
16 ssc install logout #安裝logout命令,可導出結果到word
17 logout,save(描述性統(tǒng)計結果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 #刪除重復值,只保留一年一個數(shù)據(jù)即可
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 #兩組的被解釋變量出現(xiàn)顯著差異、其他控制變量不顯著表示被解釋變量的差異是由于自變量(即政策)而產生的
方法3:
24 clear
25 tab Year,gen(yrdum) #構建一個時間的虛擬變量
26 forvalues v=2/8{
gen Treatment`v' =yrdum`v'* Treatment
} #構建變量v,2-8年的交乘項(注意代碼寫在不同的行,否則會出現(xiàn)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) #畫圖,置信區(qū)間均跨過零線說明系數(shù)不顯著,沒有明顯差異
五、分位數(shù)回歸:
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%分位數(shù)回歸,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次