SPSS 从其他变量计算变量
SPSS compute variable from other variables
我正在尝试创建一个 "index" 变量(*在数学上不是索引),我从数据集中的其他变量中调用了 '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 and Q 35 = 2
所有 3 如果条件成立所以 Res 应该是 0 -1 -1 +1 = -1
对于
的受访者
Q33 = 2, Q34 = 2 and Q 35 = 1
前两个if条件为假,最后一个为真所以Res应该是0 + 1 = 1
对于
的受访者
Q33 = 2, Q34 = 2 and Q 35 = 3
所有if条件都不成立,所以Res应该为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.
根据您的描述,您需要独立于其他条件执行每个条件转换(这在您提供的解决方案中也很明显)。
所以你的原始代码的问题与使用 do if
而不是 if
有关。 do if
中包含的所有命令只有在满足 do if
条件时才会执行。在您的情况下,以下 if
命令包含在 do if
循环中,因此没有执行 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,为正确的逻辑语句赋予数值 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)).
我正在尝试创建一个 "index" 变量(*在数学上不是索引),我从数据集中的其他变量中调用了 '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 and Q 35 = 2
所有 3 如果条件成立所以 Res 应该是 0 -1 -1 +1 = -1
对于
的受访者Q33 = 2, Q34 = 2 and Q 35 = 1
前两个if条件为假,最后一个为真所以Res应该是0 + 1 = 1
对于
的受访者Q33 = 2, Q34 = 2 and Q 35 = 3
所有if条件都不成立,所以Res应该为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.
根据您的描述,您需要独立于其他条件执行每个条件转换(这在您提供的解决方案中也很明显)。
所以你的原始代码的问题与使用 do if
而不是 if
有关。 do if
中包含的所有命令只有在满足 do if
条件时才会执行。在您的情况下,以下 if
命令包含在 do if
循环中,因此没有执行 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,为正确的逻辑语句赋予数值 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)).