首页 文章

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

提问于
浏览
3

我在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 回答

  • 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'
    }
    

    您可以在 foreach 上发送 quietly 以避免来自 replace 的175条消息 .

相关问题