|
** 这是随机指定treat变量的代码 **
forvalue i=1/LOOP_TIME{ //loop_time处填入你要进行安慰剂检验的次数
use "simdid.dta", clear //调入数据
drop treat //去掉原来DID中的post变量
gen random_digit1=ceil(runiform(1,285)) //生成随机数,我这里treat+control group共有285个个体
g new_treat=0
forvalue j=1/28{ //指定28个个体为treatment group
replace new_treat=1 if citycode==random_digit1[`j']
}
* 合并,回归,提取系数 *
set matsize 11000
g x = post*new_treat
reg y i.post i.new_treat x,vce(cluster citycode)
g _b_new_treat = _b[x] //提取x的回归系数
g _se_new_treat = _se[x] //提取x的标准误
keep _b_new_treat _se_new_treat
duplicates drop _b_new_treat, force
save placebo`i', replace //把第i次placebo检验的系数和标准误存起来
}
* 纵向合并loop_time次的系数和标准误 *
use placebo1, clear
forvalue i=2/loop_time{
append using placebo`i' //纵向合并1000次回归的系数及标准误
}
gen tvalue= _b_new_treat/ _se_new_treat
kdensity tvalue, xtitle("t值") ytitle("分布") tline(-15.253 , lp(dash) lc(black) ) tlabel(-15.253 , add labsize(*.75)) // 我基准回归的值为-15.253
* 删除临时文件 *
forvalue i=1/loop_time{
erase placebo`i'.dta
}
save 123.dta,replace
|