假设我有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" "'
但无法让它发挥作用。
答案 0 :(得分:1)
如果要将所有变量标记为相同的内容,例如"dog cat bird"
,则可以使用varlist
命令的describe
选项。假设您的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
。