我在Stata中处理某人的数据集,该数据集使用虚拟变量来指示主题ID,如下所示:
variable name variable label
country_dummy1 Afghanistan
country_dummy2 Albania
country_dummy3 Algeria
...
这使得数据集非常难以使用,我试图从虚拟对象生成主题id变量( country ),看起来像这样
country country_dummy1 country_dummy2 country_dummy3
Afghanistan 1 0 0
Albania 0 1 0
Algeria 0 0 1
我写了以下命令:
gen country = "."
foreach x of varlist country_dummy1-country_dummy175 {
local z : variable label `x'
replace country = `z' if `x'==1
}
Stata产生了以下错误消息:
Afghanistan not found
r(111);
我无法确定发生这种情况的原因。
答案 0 :(得分:2)
你需要
gen country = ""
foreach x of varlist country_dummy1-country_dummy175 {
local z : variable label `x'
replace country = "`z'" if `x'==1
}
请注意,Stata不会将"."
视为缺少的字符串值。您的错误是,如果您没有指定需要带有""
的文字字符串,那么Stata将查找具有您指定名称的变量。在您的情况下,Afghanistan
将是一个合法的变量名称,但您没有这样的变量:因此错误。名称中带有空格的国家也会因其他原因而出现问题,但由于同样的原因,命令几乎总会失败。
这也应该有效:
gen country = ""
foreach x of varlist country_dummy1-country_dummy175 {
replace country = "`: variable label `x''" if `x'
}
您可以对quietly
发送foreach
以避免来自replace
的175封邮件。