我正在尝试创建一个“索引”变量(*数学上不是索引),我从我的数据集中的其他变量中调用了“Res”。这是我试图使用的代码:
COMPUTE Res = 0.
EXECUTE.
DO IF(Q33 = 6).
COMPUTE RES = Res - 1.
IF(Q34 = 7).
COMPUTE Res = Res - 1.
IF(Q35 = 1 OR Q35 = 2).
COMPUTE Res = Res + 1.
END IF.
EXECUTE.
这不起作用 - 我的变量不会改变。尝试使用ELSE IF
并确实更改了变量,但当然只因为“else”而实现了一个更改 - 只实现了一个更改。
为了澄清我正在尝试计算Res的分数,所以我希望逐步执行代数运算。因此,例如,对于有
的受访者Q33 = 6,Q34 = 7且Q35 = 2
如果条件为真,则全部为3,因此Res应为0 -1 -1 +1 = -1
对于有
的受访者Q33 = 2,Q34 = 2且Q35 = 1
前两个如果条件为假且最后一个为真,则Res应为0 + 1 = 1
对于有
的受访者Q33 = 2,Q34 = 2且Q35 = 3
如果条件为假,则全部为Res,因此Res应为0。
感谢。
答案 0 :(得分:1)
根据您的描述,您需要独立于其他条件转换执行每个条件转换(这在您提供的解决方案中也很明显)。
因此,原始代码的问题与使用do if
而不仅仅是if
有关。只有满足do if
条件时,才会执行do if
中包含的所有命令。在您的情况下,if
循环中包含以下do if
命令,因此如果(Q33 ne 6)则不执行。
do if
用于条件命令,但对于单个转换,不需要 - if
就足够了。所以你需要的只是:
COMPUTE Res=0
IF(Q33 = 6) Res = Res - 1.
IF(Q34 = 7) Res = Res - 1.
IF(Q35 = 1 OR Q35 = 2) Res = Res + 1.
IF(Q35 = 5 OR Q35 = 6) Res = Res - 1.
最后,SPSS将数值0设置为false逻辑语句,将1设置为真值。因此,这应该做同样的工作(包括 RES 的初始定义):
compute RES = 0 - (Q33 = 6) - (Q34 = 7) + (Q35 = 1 OR Q35 = 2) - (Q35 = 5 OR Q35 = 6).
请注意,如果条件变量中缺少值,则最后一种方法存在问题。在这种情况下,你应该使用它:
compute RES = sum(0, - (Q33 = 6), - (Q34 = 7), (Q35 = 1 OR Q35 = 2), - (Q35 = 5 OR Q35 = 6)).
答案 1 :(得分:0)
这可能不是最好的方法,但以下工作:
DO IF(Q33 = 6).
COMPUTE RES = Res - 1.
END IF.
DO IF(Q34 = 7).
COMPUTE Res = Res - 1.
END IF.
DO IF(Q35 = 1 OR Q35 = 2).
COMPUTE Res = Res + 1.
END IF.
DO IF(Q35 = 5 OR Q35 = 6).
COMPUTE Res = Res - 1.
END IF.
EXECUTE.