特殊情况下忽略 spss IF 循环 MISSINGS

spss IF loop MISSINGS ignored in special cases

我想计算一个变量 X=x1+x2+x3。 x1、x2 和 x3 的值为 1 或 0。我将系统缺失值重新编码为 -77。需要满足一些条件。

1) 如果x1,x2或x3中有一个缺失值,那么如果其他变量中有一个或两个值为1,则应忽略它。因此,尽管存在缺失值,但仍应计算总和值,但前提是至少有一个 1(例如 X = x1 + x2 + x3 = 0 + missing + 1 = 1)

2)如果x1,x2,x3中有一个缺失值,那么如果根本没有1,则不应该忽略,不应该计算和。 (例如 X = x1 + x2 + x3 = 0 + missing + missing = missing)。

我试着用 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。

我认为通过上面的循环我接近结果但缺少一些东西。 下面是我 post 我制作的其他一些循环,但都没有用,我认为上面的那个是最接近正确答案的。

非常感谢您的帮助,祝复活节快乐! 为绝望的 Ichav 干杯 :)

COMPUTE X = x1 + x2 + x3.
RECODE X (SYSMIS=-77).
IF ((X = -77 AND x1 = 1) OR (X = -77 AND x2 = 1) OR (X = -77 AND x3 = 1)) X =1.
EXECUTE.

此处 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 被定义为缺失值 - 否则计算 sum(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.