从Stata中的虚拟指示器生成标识变量

时间:2015-11-09 03:45:44

标签: foreach stata

我在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);

我无法确定发生这种情况的原因。

1 个答案:

答案 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封邮件。