最近用stata采用20年260个id面板数据开展合成控制法 (Synthetic Control Method)分析,进行安慰剂检验出现错误,命令是
xtset id year
tempname resmat //设定一个临时矩阵叫做resmat
forval i=1/100{
qui synth y x1 x2 x3 x4 x5 x6, trunit(`i') trperiod(2018) counit(1(1)40 201(1)260) xperiod(2001(1)2010) keep(SCM_synth_`i',replace)
matrix `resmat' = nullmat(`resmat') \ e(RMSPE) //矩阵用来存放每个州进行合成控制的rmspe值
local names `"`names' `"`i'"'"'
}
mat colnames `resmat' = "RMSPE" //矩阵的列名定义为RMSPE
mat rownames `resmat' = `names' //矩阵的行名为names
matlist `resmat' , row("Treated Unit")
命令执行到这,就提示上述错误:treated unit appears among control units - check co() and tr() r(198);
似乎是forval i=1/100,与counit(1(1)40 201(1)260),不能有交集,比如换成forval i=1/60,counit( 201(1)260)或者删掉counit这个命令会好一点。
选择项" counit(numlist) "用于指定潜在的控制地区(即 donor pool,其中 counit 表示 control units),默认为数据集中的除处理地区以外的所有地区。