我想计算变量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。
我认为通过上面的循环,我接近结果,但缺少某些东西。 下面我发布了我做的其他一些循环,但都没有工作,我认为上面的那个最接近正确答案。
非常感谢你的帮助和复活节快乐! 干杯绝望的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。
答案 0 :(得分:1)
这是为了创建一些样本数据:
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
转换为缺失值,则可以在-77
语句中使用值if
(如您之前尝试过的那样) )。这是一种更简单的方法:
if X=0 and any(-77, x1, x2, x3) X=999.