0
votes

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
Labels means value labels? variable labels? Probably the second, but if you do not show code a minimal expectation is that you show how you want your data to look.Nick Cox
Thanks for the edit that clarified this. In general, the approach of putting all the variable labels into one local macro poses the problem of taking them out again, as you discovered. It can be as easy to use varm interactively, or if you prefer more directly reproducible research to create a do-file defining the variable labels one by one.Nick Cox

1 Answers

1
votes

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.