Stata: Assign labels to range of variables with a loop

笑着哭i 提交于 2019-12-13 21:03:57

问题


Let's say I have 60 variables, none with similar naming patterns. I want to assign labels to all variables, which I stored locally. So for example

local mylabels "dog cat bird"  

However I am struggling with the exact expression of the loop. Do I have to store my variable range globally and then use a foreach? Or do I use forvalues?

Edit: I was referring to variable labels. I managed to create a loop, similar to the method used here http://www.stata.com/support/faqs/programming/looping-over-parallel-lists/. However I ran into a more difficult problem: my variables have no particular naming patterns, and the labels have special characters (spaces, commas, %-signs), and here is where my loop does not work.

Some example data (excuse the randomness):

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

And some example labels:

"Time series of apples, sum, %" "Average of pears, over 1 year" "Maximum of bananas, over 2 years".

I ran into this entry by Nick Cox: http://www.stata.com/statalist/archive/2012-10/msg00285.html and tried to apply the mentioned parentheses method, like so:

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

But could not get it to work.


回答1:


If you want to label all the variables the same thing, for example "dog cat bird", Then you can use the varlist option for the describe command. Let's say your 60 variables can be generally listed with the expression EXP. Then:

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

Edited: Taking your example data, I created another local containing the variable names.

 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'"
 }

Note that I manually created the list of variables. You can automatically create this list using the method I listed above, with des, varlist.

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

You can then use the local myvar_t instead of myvar in the above example.



来源:https://stackoverflow.com/questions/33276891/stata-assign-labels-to-range-of-variables-with-a-loop

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!