求助各位大牛:
学习了连玉君老师以及B站两位UP主的视频,自己进行了多期DID,样本总数是165个,其中实验组59个。由于用的季度数据,在安慰剂检验时,季度时间无法识别,所以时间那里进行了转换,那里应该没有问题。代码如下,可是到最后画图的时候,失败了,附上图形,然后查看了下生成的三个矩阵,每个里面的数是一样的,应该是这里出问题了,可是怎么也检查不出问题了,求助大牛能给予指点!
mat b = J(500,1,0)
mat se = J(500,1,0)
mat p = J(500,1,0)
forvalues i = 1/500{
use "C:\Users\86186\Desktop\安慰剂检验\1.dta", clear
xtset id TIME
keep if TIME==21275 //这里是季度时间无法识别,进行了转换
sample 59,count
keep id
save matchid.dta,replace
merge 1:m id using "C:\Users\86186\Desktop\安慰剂检验\1.dta"
gen treat1=(_merge==3)
save matchid`i'.dta,replace
use "C:\Users\86186\Desktop\安慰剂检验\1.dta", clear
bsample 1,strata(id)
keep TIME
save matchyear.dta,replace
mkmat TIME,matrix(sampleTIME)
use matchid`i'.dta,replace
xtset id TIME
gen time=0
foreach j of numlist 1/165{
replace time=1 if (id == `j' & TIME >= sampleTIME[`j',1])
}
gen did=treat*post
qui xtreg ROA did ncfo shr npms goper Asset age tp,fe r
mat b[`i',1] = _b[did]
mat se[`i',1] = _se[did]
scalar df_r = e(N) - e(df_m) -1
mat p[`i',1] = 2*ttail(df_r,abs(_b[did]/_se[did]))
}
svmat b, names(coef)
svmat se, names(se)
svmat p, names(pvalue)
drop if pvalue1 == .
label var pvalue1 p值
label var coef1 估计系数
twoway (scatter pvalue1 coef1, xlabel(-1(0.1)1, grid) yline(0.1,lp(shortdash)) xline(0.12,lp(shortdash)) xtitle(估计系数) ytitle(p值) msymbol(smcircle_hollow) mcolor(blue) legend(off))(kdensity coef1,title(安慰剂检验))