我正在尝试创建一个"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中尝试过,这确实改变了变量,但是当然,因为“否则”而只实现了一个更改--只有一个更改被实现了。
为了澄清,我试图为Res计算一个分数,所以我希望一步一步地执行代数运算。因此,例如,对于答辩人来说
Q33 = 6,Q34 =7,Q 35 =2
如果条件为真,则所有3种情况都应为0 -1 -1 +1 = -1。
对答辩人来说
Q33 = 2,Q34 =2,Q 35 =1
前两个条件为false,最后一个条件为true,因此Res应为0+1=1。
对答辩人来说
Q33 = 2,Q34 =2和Q35=3
如果条件为false,则所有情况都是假的,因此Res应该为0。
谢谢。
发布于 2017-03-15 06:36:14
从您的描述中,您需要独立于其他转换来执行每个条件转换(这在您提供的解决方案中也很明显)。
因此,原始代码的问题与使用do if而不是只使用if有关。只有在满足do if条件时,才会执行do if中包含的所有命令。在您的示例中,下面的if命令包含在do if循环中,因此没有执行if (Q33 Ne6)。
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)).发布于 2017-03-15 03:37:31
这可能不是最好的方法,但以下工作:
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.https://stackoverflow.com/questions/42781263
复制相似问题