'Stata foreach loop to generate new variables from a list of variable names
I am looking to create a loop which creates dummy variables and names them from a list of variable names, and then stops once all variable names have been iterated over once.
My Attempt:
gen c = 0
foreach x of varlist stchpr01-stchpr11{
foreach i in teacher_late teacher_absent teacher_skip teacher_bully teacher_harass_teachers teacher_harass_pupils teacher_language teacher_drugs teacher_alcohol teacher_health teacher_conflict{
while c < 11{
gen `i' = 0
replace `i' = 1 if `x' == 2 | `x' == 3
replace `i' = 0 if `x' == 1
replace `i' = . if missing(`x')
replace c = c+1
}
}
}
Solution 1:[1]
I sense that you are getting confused between
local macros and variables in Stata's sense (although the
cmachinery is legal, local macros are better for use as counters, except that you don't need one at all)generateandreplaceas you're trying togeneratevariables that already existloops in parallel, which are not nested loops
What is a little unclear (to me) is exactly what you want to do.
I take it this is what you want.
You have 11 existing variables.
You want 11 corresponding new variables, each of which is to be an indicator 1 if the corresponding existing variable is 2 or 3, 0 if it is 1, and missing otherwise.
If so, this is a code sketch. NB: it's just one loop.
local newvars teacher_late teacher_absent teacher_skip teacher_bully teacher_harass_teachers teacher_harass_pupils teacher_language teacher_drugs teacher_alcohol teacher_health teacher_conflict
foreach x of varlist stchpr01-stchpr11 {
gettoken new newvars : newvars
gen `new' = cond(`x' == 2 | `x' == 3, 1, cond(`x' == 1, 0, .))
}
See also https://journals.sagepub.com/doi/pdf/10.1177/1536867X211063415
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
