Stata - 为变量值添加前缀

时间:2014-07-18 15:12:37

标签: string loops latex stata

我有很多变数。为简洁起见,假设我有两个:GenderMeal。在Stata中,我正在使用tabout,这是一个允许根据Stata结果生成.tex的包,可以在LaTeX中作为表打开。

为了在变量标签之前创建一个间距较小的自定义输出,我想在每个变量的所有值(而不是标签)的开头分配一个前缀\hspace{0.3cm}。如何使用循环自动执行此操作而不是手动执行此操作?

我们说我从这开始:

label def gen 0 "Male" 1 "Female", modify
label value Gender gen

label def me 0 "Lunch" 1 "Dinner", modify
label value Meal me

我希望有一个循环,会自动将前缀添加到GenderMeal的各个值中。最终结果与我最初的结果相同:

label def gen 0 "\hspace{0.3cm}Male" 1 "\hspace{0.3cm}Female", modify
label value Gender gen

label def me 0 "\hspace{0.3cm}Lunch" 1 "\hspace{0.3cm}Dinner", modify
label value Meal me

请注意,代码(来自http://www.jwe.cc/2012/03/stata-latex-tables-estout/)对变量标签(和NOT值)执行类似的操作如下:

foreach v of varlist * {
    label variable `v' `"\hspace{0.1cm} `: variable label `v''"'
    }

2 个答案:

答案 0 :(得分:3)

以下是一些产生所需字符串的代码。我留给你定义新的值标签并分配给变量。如果它有用,请告诉我们。

clear all
set more off

*----- example -----

label def gen 0 "Male" 1 "Female", modify
*label value Gender gen

label def meal 0 "Lunch" 1 "Dinner", modify
*label value Meal me

*----- what you want -----

label dir
local rnames `=r(names)'

foreach labname of local rnames {

    quietly label list `labname'
    local myname

    forvalues i = 0/`r(max)' {

        local name : label `labname' `i', strict
        local newname \hspace{0.3cm}`name'

        local myname `myname' `newname'

    }

    display "`myname'"

}

你可以缩短一点,但这一切都非常“明确”。

help labelhelp extended_fcn是必读的。

(我仍然坚持认为tabout内的解决方案可能可能;但我无法确定。)

修改

以下是更一般的,有更好的形式,是一个完整的例子。 扩展宏函数仍然是代码的基础。

clear all
set more off

*----- example database -----

sysuse voter

*----- what you want -----

foreach var of varlist _all {

    local cnewname

    quietly labellist `var'

    if  "`r(lblname)'" != "" {
        *disp "`var'"

        forvalues i = 1/`r(`r(lblname)'_k)' { 

            local val : word `i' of `r(values)'
            local labval : word `i' of `r(labels)'

            local newname `val' "\hspace{0.3cm}`labval'"
            local cnewname `cnewname' `newname'

        } // forvalues

    label define newlbl`var' `cnewname'
    label value `var' newlbl`var'

    } // if

} // foreach


labellist

我定义新的值标签并重新关联相应的变量。您可以尝试更换或满足您的需求。

答案 1 :(得分:2)

Stata不了解TeX或LaTeX,至少不是这样。

你可以只用空格加前缀,但Stata通常会以任何方式忽略它们。

我偶尔使用的一个奇怪的技巧是使用char(160)作为一个看起来像空间但不会被修剪的垫。

length(trim("`=char(160)'"))

报告为1,即未调整char(160)。要检查您的计算机上是否隐身char(160)

di char(160) 

但是这如何运作肯定取决于你的TeX / LaTeX代码以及它如何处理这个角色。