使用适当的标签将分类变量制成虚拟变量

时间:2017-06-03 12:06:28

标签: stata

我有一个带有适当标签的变量:

        Sex |      Freq.     Percent        Cum.
------------+-----------------------------------
       Male |  9,043,349       48.70       48.70
     Female |  9,524,274       51.30      100.00
------------+-----------------------------------
      Total | 18,567,623      100.00

我想按分类值创建一个包含摘要统计信息的表格。它在这里没有多大意义,因为只有两个值,但无论如何都要这样做。我生成

 tab sex, gen(sexd_)

然后当我创建表时:

. esttab test, replace cell("mean")  label

---------------------------------
                              (1)

                             mean
---------------------------------
sex==Male                .9028908
sex==Female              .0971092
---------------------------------
Observations               123943
---------------------------------

但是该表格显示了愚蠢的sex==前缀,我希望此处只有MaleFemale。这是因为tab, generate创建了类似的变量:

                              (1)

                             mean
---------------------------------
sex==Male                .9028908
sex==Female              .0971092
---------------------------------
Observations               123943
---------------------------------

如何巧妙地创建我想要的标签,而无需手动浏览所有条目?

1 个答案:

答案 0 :(得分:0)

这个问题可能有助于给出一个最小的代码示例。有关一般指导,请参阅https://stackoverflow.com/help/mcve。这是一个这样的结果显示:

. clear

. set obs 2
number of observations (_N) was 0, now 2

. gen sex = _n - 1

. label def sex 0 Male 1 Female

. label val sex sex

. tab sex

        sex |      Freq.     Percent        Cum.
------------+-----------------------------------
       Male |          1       50.00       50.00
     Female |          1       50.00      100.00
------------+-----------------------------------
      Total |          2      100.00

. tab sex, gen(sexd)

        sex |      Freq.     Percent        Cum.
------------+-----------------------------------
       Male |          1       50.00       50.00
     Female |          1       50.00      100.00
------------+-----------------------------------
      Total |          2      100.00

tabulate不提供控制新指标变量的变量标签的选项(术语中的虚拟变量)。所以,这是一个如何最好地清理的问题。

第一个原则方法是循环变量并从变量标签中删除有问题的前缀文本。在这里,我们只选择==后面的内容。另一种方法是将文本替换为包含==的文本,并删除它。

foreach v of var sexd* { 
    local lbl : var label `v' 
    local lbl = substr(`"`lbl'"', strpos(`"`lbl'"', "==") + 2, .) 
    label var `v' `"`lbl'" 
} 

有一个便利命令可以在一个中完成。它必须作为SSC包的一部分安装。下面的第一个命令只需要在任何机器上完成一次。

ssc inst labutil 
labvarch sexd*, after(==) 

最糟糕的是,你有几个这样的变量需要修复。您如何有效地识别哪些变量标签包含==?您可以编写循环来执行此操作,或使用findnamesearch findname获取最新下载位置)。

findname, varlabeltext(*==*) 

findname显示匹配的任何变量的变量名称;这些名称可以在`r(varlist)'中访问,所以(给定安装)这会削弱所有可能违规的标签:

findname, varlabeltext(*==*) 
labvarch `r(varlist)', after(==) 

当然,您需要注意任何误报,即变量标签中需要==的任何变量。

您可以随时手动创建指标并直接创建自己的变量标签;或直接更改变量标签。