Stata使用if语句

时间:2014-11-12 21:03:06

标签: stata

我有一种情况需要检查一组变量并替换一个值。例如,我认为我有三个变量a, b, c。如果z = 1cb,我需要创建变量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

1 个答案:

答案 0 :(得分:1)

这在几个层面上令人困惑或困惑。

(0)根据数据集中首次出现1的时间,似乎存在这个问题。如果是这样,你需要更清楚地拼写出来。

(1)首先,如果abc中的任何一个为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