2017-06-03 63 views
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 
--------------------------------- 

我怎样才能巧妙地创造我想要的标签,而无需通过所有条目手动去?

回答

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(==) 

最糟糕的是,您有几个这样的变量需要解决。您如何有效识别哪些变量标签包含==?您可以编写一个循环来执行此操作,也可以使用findname(最新下载位置为search findname)。

findname, varlabeltext(*==*) 

findname显示任何变量匹配的变量名称;这些名字是`R(varlist中)”访问,因此(定安装)本斜线的方式,通过所有可能得罪标签:

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

当然,你需要注意任何误报,也就是说,任何变量在变量标签中需要==

您总是可以手工创建指标,并直接创建您自己的变量标签;或直接更改变量标签。