首页 文章

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

提问于
浏览
0

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

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

    这个问题可能有助于给出一个最小的代码示例 . 有关一般指导,请参见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(==)
    

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

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

相关问题