我遇到了一个以前从未遇到过的问题,我无法弄清楚到底是怎么回事。
我正在尝试如下计算变量:
COMPUTE A=$SYSMIS.
IF B=$SYSMIS A=$SYSMIS.
IF C > SUM(B, 1) A= 1.
IF C = SUM(B, 1) A= 2.
IF C = B A= 2.
IF C < B A=3.
除了B = $ SYSMIS时,有很多A的例子实际上并没有缺失,这一点运行得很好。
我使用以下方法进行了测试:
TEMP.
SELECT IF B=$SYSMIS.
FREQ A.
它告诉我“此过程未输入任何案例。工作数据文件中没有案例,或者所有案例都已被过滤掉。”
意味着,代码正常工作。
但是...我发现有1000多个案例不符合这种逻辑。
TEMP.
SELECT IF ID=102.
FREQ A B.
这显示了一个特定的ID,该ID具有A = $ SYSMIS和B = 2。
A,B和C都是数字。
在此先感谢您提供任何见解! (:
答案 0 :(得分:2)
首先,应该使用IF B=$SYSMIS
代替if missing(B)
-用于计算,分析和选择。
您的结果的另一个可能原因是这样的命令:
IF C > SUM(B, 1) A=1.
如果B丢失,则SUM(B, 1)
的结果为1。因此,即使C>1
A的值为1,尽管B丢失了。
有两种方法可以解决这个问题。
首先,如果缺少X或Y,则使用X+Y
而不是sum(X,Y)
会导致值丢失:
IF C > (B + 1) A=1.
第二个选项:将命令COMPUTE A=$SYSMIS.
放在语法的末尾而不是开头,因此,当缺少B时在A中输入的任何值都将替换为缺少的值。