问题描述
我正在使用下面的代码在 Stata 中生成一个新变量,但出现错误,指出 "hv2 invalid name r(198);"*
gen ph= hv1==2
replace ph=. if hv2*!=1
label values ph yesno
label var ph "PH present"
其中 hv2* 是指从 hv2_1 到 hv2_98 的变量(共 98 个变量)。 hv2* 是住户变量,不是 1 的值表示受访者不是来自调查中使用的住户。我的新变量 ph 取决于受访者是否是调查中使用的家庭中的居民。新变量 (ph) 中应该缺少非居民,因此“替换 ph=.if hv2!=1”。也就是说,hv2 变量中任何非 1 的值都应该在新变量中丢失。
解决方法
gen ph = hv1 == 2
quietly forval j = 1/98 {
replace ph = . if hv2_`j' == 1
}
命令 egen
提供了可以在此处使用的函数,以便(例如)
gen ph = hv1 == 2
egen any1 = anymatch(hv2_*),values(1)
replace ph = . if any1
似乎避免了循环,但您只是在 anymatch()
的代码内部有一个循环来做同样的事情。