If statement 特殊情况下忽略spss IF循环缺失

If statement 特殊情况下忽略spss IF循环缺失,if-statement,syntax,spss,missing-data,If Statement,Syntax,Spss,Missing Data,我想计算一个变量X=x1+x2+x3。x1、x2和x3的值为1或0。我把系统的错误重新编码为-77。应该满足一些条件 1) 如果x1、x2或x3中缺少值,则如果其他一个或两个变量的值为1,则应忽略该值。因此,尽管缺少一个值,但只有当至少有一个1(例如,X=x1+x2+x3=0+缺少+1=1)时,才应计算总和 2) 如果x1、x2或x3中缺少值,则如果根本没有1,则不应忽略该值,并且不应计算总和。(例如X=x1+x2+x3=0+缺失+缺失=缺失) 我试着用IF做一个循环,但它不起作用,我就是不知道

我想计算一个变量X=x1+x2+x3。x1、x2和x3的值为1或0。我把系统的错误重新编码为-77。应该满足一些条件

1) 如果x1、x2或x3中缺少值,则如果其他一个或两个变量的值为1,则应忽略该值。因此,尽管缺少一个值,但只有当至少有一个1(例如,X=x1+x2+x3=0+缺少+1=1)时,才应计算总和

2) 如果x1、x2或x3中缺少值,则如果根本没有1,则不应忽略该值,并且不应计算总和。(例如X=x1+x2+x3=0+缺失+缺失=缺失)

我试着用IF做一个循环,但它不起作用,我就是不知道为什么

COMPUTE X =SUM(x1, x2, x3).
IF (x1=-77 AND x2~=1 AND x3~=1) X=999. 
IF (x2=-77 AND x1~=1 AND x3~=1) X=999.
IF (x3=-77 AND x1~=1 AND x2 ~=1)X=999.  
EXECUTE.
以下是返回的结果: 当x1=1,x2=0,x3=-77时,X=1。(这就是我想要的结果。 当x1=-77,x2=0,x3=0时,问题就出现了,因为当时X=0,而不是我想要的999

我认为通过上面的循环,我已经接近结果了,但是缺少了一些东西。 下面我发布了一些我做的其他循环,但都不起作用,我认为上面的一个最接近正确答案

非常感谢你的帮助,复活节快乐! 欢呼绝望的伊哈夫:)


这里X总是以-77的形式返回。

这是为了创建一些要处理的示例数据:

data list list/x1 x2 x3.
begin data
1 0  -77
0 -77 0
0 0 0 
1 0 1
end data.
MISSING VALUES x1 x2 x3 (-77).
如您所见,这是假设
-77
被定义为缺失值-否则计算
和(x1,x2,x3)
将失败

COMPUTE X=SUM(x1, x2, x3).
if X=0 and nmiss(x1, x2, x3)>0 X=999.
现在-如果没有1值,则总和为0。如果总和为零,并且涉及任何(超过0)缺失值-总和将更改为999

如果您以某种方式间接计算了
X
,而没有将
-77
转换为缺少的值,则可以使用
If
语句中的值
-77
(如您之前尝试的那样)。那么,更简单的方法是:

if X=0 and any(-77, x1, x2, x3) X=999.

所以:如果至少有一个变量等于1,或者三个变量都不缺失,则需要求和。否则,结果将
丢失
。我的理解正确吗?是的,这正是我想要的,我认为eli-k在下面的答案中已经涵盖了这一点。谢谢你们两位的帮助!亲爱的eli-k非常感谢你的帮助。代码运行得非常好!
if X=0 and any(-77, x1, x2, x3) X=999.