我在 Stata 中有一個嵌套回圈,有四個級別的foreach陳述句。通過這個回圈,我試圖創建一個名為strata1 到 40的新變數。
foreach x in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 {
foreach r in 1 2 3 4 5 {
foreach s in 1 2 {
foreach a in 1 2 3 4 {
gen strata= `x' if race==`r' & sex==`s' & age==`a'
}
}
}
}
我收到一個錯誤:
“已定義可變層”
即使有錯誤,回圈也會分配strata= 1,而不是其余的層。所有其他單元格都丟失/為空。
示例資料:
* Example generated by -dataex-. To install: ssc install dataex
clear
input byte(age sex race)
1 2 2
1 2 1
1 1 1
1 1 1
1 2 1
2 2 1
2 2 1
4 2 1
1 2 1
4 2 1
3 2 1
2 2 1
4 2 1
4 2 2
3 2 1
4 1 3
4 2 1
4 2 1
2 1 2
4 2 1
2 2 1
3 2 1
3 2 1
1 2 3
4 2 1
1 2 5
4 2 1
4 2 1
4 2 2
4 2 1
2 2 1
4 1 1
3 2 1
1 2 1
2 2 1
4 2 1
1 2 2
2 2 3
1 1 3
4 2 1
2 2 3
1 2 1
1 1 1
2 2 3
1 2 1
1 1 3
1 2 1
2 2 1
3 2 1
1 2 1
4 2 1
1 2 2
1 2 1
2 2 1
4 2 1
4 2 1
1 2 1
1 2 1
4 2 1
2 2 1
4 2 1
1 2 1
1 1 3
2 2 1
1 1 1
4 1 1
3 2 1
2 2 1
1 2 1
1 1 1
2 2 3
4 2 2
2 2 1
2 2 1
3 2 1
2 2 2
3 2 1
2 1 1
1 1 1
3 2 1
1 2 3
4 2 1
4 2 1
2 2 1
1 2 1
1 1 1
3 2 1
4 2 1
2 2 3
1 2 3
4 2 1
3 2 1
2 2 1
4 2 1
3 2 1
2 1 1
1 2 1
2 2 1
2 2 3
1 1 1
end
label values sex sex
label def sex 1 "male (1)", modify
label def sex 2 "female (2)", modify
label values race race
label def race 1 "non-Hispanic white (1)", modify
label def race 2 "black (2)", modify
label def race 3 "AAPI/other (3)", modify
label def race 5 "Hispanic (5)", modify
uj5u.com熱心網友回復:
generate用于生成新變數。當您的代碼第二次到達generate陳述句時,代碼會由于給定的原因而失敗。
一個答案是,您需要將generate變數放在回圈之外,然后replace在回圈內部。
由于其他原因,您的代碼可以分階段重寫。
首先,整數序列可以用 更容易和更有效地指定forvalues,可以縮寫為:我傾向于寫forval.
gen strata = .
forval x = 1/40 {
forval r = 1/5 {
forval s = 1/2 {
forval a = 1/4 {
replace strata = `x' if race==`r' & sex==`s' & age==`a'
}
}
}
}
其次,代碼有任何缺陷。一切都以40結束!
第三,您可以更直接地進行分配,例如
gen strata = 8 * (race - 1) 4 * (sex - 1) age
這是一個獨立的可重現演示:
clear
set obs 5
gen race = _n
expand 2
bysort race : gen sex = _n
expand 4
bysort race sex : gen age = _n
gen strata = 8 * (race - 1) 4 * (sex - 1) age
isid strata
顯然,您可以而且應該為不同的首選方案改變配方。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/405892.html
標籤:
下一篇:如何實作可迭代結構?
