我有一种情况需要检查一组变量并替换一个值。例如,我认为我有三个变量a, b, c
。如果z = 1
或c
或b
,我需要创建变量a == 1
。
换句话说,我需要创建一个if循环,首先检查c
以查看c
是否为1;如果不是我想检查b
是否为1;如果a
不是1.如果c
为1,则循环必须停止,或者如果b
为1,则需要停止检查a
。
我的代码是
gen z=.
foreach var in c b a{
if `var'=1 & z!=. {
replace z=1
}
else
z=.
}
}
这段代码无法满足我的要求,我无法绕过它。我知道我可以使用像这样的命令
replace z=1 if (a==1|b==1|c==1)
但据我了解此代码检查条件
(a==1|b==1|c==1)
同时进行。我要求循环逐步检查每个变量a
b
c
。
答案 0 :(得分:1)
这在几个层面上令人困惑或困惑。
(0)根据数据集中首次出现1
的时间,似乎存在这个问题。如果是这样,你需要更清楚地拼写出来。
(1)首先,如果a
,b
或c
中的任何一个为1,则表示您想要新值1.为此,正确的代码可能是(当您结束)
replace z = 1 if a == 1 | b == 1 | c == 1
或者
replace z = 1 if inlist(1, a, b, c)
但是你否认这就是你想要的并谈论一个循环。但是不需要循环来解决你提出的问题。
(2)您说您使用的较长代码段包含非法语句,并且无法运行。它(几乎可以肯定)混淆了你不想要的if
命令和你可能想要的if
限定符。见this FAQ for explanation
(3)正确的拼写是" Stata",而不是" STATA",已经在帖子中多次更正了。请注意这个最简单的细节。
(4)请注意最小可重复性示例的原则。 https://stackoverflow.com/help/mcve