【问题标题】:Stata - Add Prefix to Variable ValuesStata - 为变量值添加前缀
【发布时间】:2014-07-18 15:12:36
【问题描述】:

我有很多变数。为简洁起见,假设我有两个: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/)如下:

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

【问题讨论】:

  • 你是如何创建 LaTeX 代码的?也许在 Stata 中做这种事情的程序将允许您设置这种格式而不会篡改标签。
  • 查看我对 Nick Cox 问题的评论。

标签: string loops latex stata


【解决方案1】:

这里有一些代码可以生成你想要的字符串。我留给您定义新的值标签并分配给变量。让我们知道它是否有用。

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

我定义了新的值标签并与相应的变量重新关联。您可以尝试更换或任何适合您的需求。

【讨论】:

  • 作为参考,我还发现~ 可以是更短的替换,也可以在LaTeX 中添加空格。
【解决方案2】:

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

您可以只使用空格作为前缀,但 Stata 通常会以任何方式忽略它们。

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

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

报告为 1,即char(160) 未被修剪。要检查 char(160) 在您的机器上是否不可见,

di char(160) 

但这如何工作肯定取决于您的 TeX/LaTeX 代码以及它如何处理该字符。

【讨论】:

  • 我正在使用 tabout 来生成一个 .tex 文件来生成一个可以稍后在 LaTeX 中打开的表格。换句话说,我不关心它在 Stata 中的样子,只关心 LaTeX。我想让变量值缩进jwe.cc/2012/03/stata-latex-tables-estout 这个网站提供了如何做我想做的事情的代码,除了他在变量标签而不是变量值前面添加了空格。他用的是est,所以有点不一样。
  • foreach v of varlist * { label variable v' "\hspace{0.1cm} : 变量标签v''"' }
  • 上面的代码(当这里没有被压缩时)是正确的想法,但它是针对变量标签而不是变量值的。此代码来自上述网站。
  • 我建议您编辑您的问题以提出您真正遇到的问题。 1. 你没有提到tabout,但这似乎是你正在做的事情的核心。 (记录它的出处也是个好主意。) 2. 您在值标签上展示了代码,但您现在对 variable 标签进行了注释,因此您想要的不是很清楚。原则上,您也可以为字符串值添加前缀,但不能为数值添加前缀。
  • 好点。我进行了编辑。希望现在一切都好起来了。很抱歉造成混乱。
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
相关资源
最近更新 更多