我使用的是面板数据,其中变量countrynum是138个国家的国家编号,icr是自变量。为了进行池化测试,我必须运行下面的代码来获得变量icr_1,icr_2,icr_3 ... icr_138。
但是,代码只生成icr_1。有人能告诉我为什么吗?我需要全部138个变量。
xi, prefix(C) i.countrynum
gen Ccountrynum_1=1 if countrynum==1
replace Ccountrynum_1=0 if countrynum!=1
foreach var of varlist icr {
foreach num of numlist 1(1)138{
gen `var'_`num'=`var'* Ccountrynum_`num'
}
} 发布于 2020-06-22 22:13:12
在你的代码中有一些我会做的不同的事情,但是我没有看到任何会导致错误的东西。与调试代码相比,我认为对您正在做的事情提出一种更简单的方法会更有用:
separate icr, by(countrynum)xi是一个旧的命令,已经被因子变量表示法所取代,所以你只需要xi,以防你使用的是不支持它的旧命令,我认为这里不是这种情况。
据我所知,要进行池化测试,您可以使用i.countrynum运行回归,如下所示:
reg y x1 x2 x... i.countrynum
testparm i.countrynumtestparm的输出将告诉您这些国家的虚拟对象是否具有共同意义。
发布于 2020-06-22 22:38:44
我不容易理解这一点。我们首先要注意的是
gen Ccountrynum_1=1 if countrynum==1
replace Ccountrynum_1=0 if countrynum!=1简化为
gen Ccountrynum_1 = countrynum == 1 也就是说,双循环
foreach var of varlist icr {
foreach num of numlist 1(1)138{
gen `var'_`num'=`var'* Ccountrynum_`num'
}
} 简化为单循环
forval num = 1/138 {
gen icr_`num' = icr * Ccountrynum_`num'
} 也就是说,很难理解为什么要期望这些代码能够工作,因为您只解释了Ccountrynum_1的生成。
需要这么多额外的变量是很不寻常的。除了@Wouter Wakker的建议之外,tabulate, generate()还允许在必要时生成没有循环的指示器变量。
https://stackoverflow.com/questions/62512949
复制相似问题