【问题标题】:Stata: Assign labels to range of variables with a loopStata:使用循环将标签分配给变量范围
【发布时间】:2015-10-22 08:48:10
【问题描述】:

假设我有 60 个变量,没有一个具有相似的命名模式。我想为我存储在本地的所有变量分配标签。比如

local mylabels "dog cat bird"  

但是,我正在为循环的确切表达而苦苦挣扎。我是否必须全局存储我的变量范围,然后使用 foreach?还是我使用 forvalues?

编辑:我指的是变量标签。我设法创建了一个循环,类似于这里使用的方法http://www.stata.com/support/faqs/programming/looping-over-parallel-lists/。但是我遇到了一个更困难的问题:我的变量没有特定的命名模式,标签有特殊字符(空格、逗号、%-符号),这是我的循环不起作用的地方。

一些示例数据(请原谅随机性):

gen Apples_ts_sum = .
gen Pears_avg_1y = .
gen Bananas_max_2y = .

还有一些示例标签:

“苹果的时间序列,总和,%”“梨的平均值,超过 1 年” “最多香蕉,超过 2 年”。

我遇到了 Nick Cox 的这个条目:http://www.stata.com/statalist/archive/2012-10/msg00285.html 并尝试应用提到的括号方法,如下所示:

 local mylabels `" "Time series of apples, sum, %" "Average of pears, over 1 year" "Maximum of bananas, over 2 years" "'

但无法让它工作。

【问题讨论】:

  • 标签意味着价值标签?变量标签?可能是第二个,但如果您不显示代码,那么最低限度的期望是显示您希望数据的外观。
  • 感谢您澄清这一点的编辑。一般来说,将所有变量标签放入一个本地宏的方法会引起再次将它们取出的问题,正如您所发现的那样。它可以很容易地以交互方式使用varm,或者如果您更喜欢更直接的可重复研究来创建一个定义变量标签的do-file。

标签: loops stata labels


【解决方案1】:

如果您想将所有变量标记为相同的东西,例如"dog cat bird",那么您可以为describe 命令使用varlist 选项。假设您的 60 个变量通常可以用表达式 EXP 列出。那么:

    qui des EXP, varlist
    foreach variable in `r(varlist)'{
        label var `variable' "dog cat bird"
    }

已编辑: 以您的示例数据为例,我创建了另一个包含变量名称的局部变量。

 local myvar `" "Apples_ts_sum" "Pears_avg_1y" "Bananas_max_2y" "'
 local mylabels `" "Time series of apples, sum, %" "Average of pears, over 1 year" "Maximum of bananas, over 2 years" "'
 forval n = 1/3{
    local a: word `n' of `mylabels'
    local b: word `n' of `myvar'
    di "variable `b', label `a'"
    label var `b' "`a'"
 }

请注意,我手动创建了变量列表。您可以使用我上面列出的方法自动创建此列表,des, varlist

qui des , varlist
foreach var in `r(varlist)'{
    local myvar_t "`myvar_t' `var'"
}

然后您可以使用本地的myvar_t,而不是上面示例中的myvar

【讨论】:

  • OP 似乎不太可能希望所有变量都使用相同的变量标签。但如果是这样,describe 在这里是可有可无的,因为foreach var of var EXP 就足够了。但是,OP尚未澄清问题。
  • 这是真的。如果每个变量的标签应该不同,并且没有系统相似之处,那么我无法想象不是手动的东西。
  • 我疯狂地猜测 OP 已将大量变量标签放入宏中,现在想再次将它们取出,但猜测是徒劳的;也许它毕竟是价值标签。明确需要什么是 OP 的唯一责任。
  • 此处回复较晚:请参阅原始帖子中的编辑以获取更多信息。
  • 编辑后的回复现在很有帮助,并且通过将其排除在第一次猜测的意思会变得更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2017-07-11
  • 1970-01-01
相关资源
最近更新 更多