来自SPSS中基本IF和OR语法的结果

时间:2015-08-27 22:31:59

标签: spss

下面的我的SPSS语法代码不会产生预期的结果。即使reason 等于15或16,它也会将ped.crossing.with.signal标记为1。

COMPUTE ped.crossing.with.signal = 0.
IF  ((ped.action = 1 | ped.action = 2) AND (reason ~= 15 | reason ~= 16)) ped.crossing.with.signal = 1.
EXECUTE.

当我这样做时,它有效......但为什么?

COMPUTE ped.crossing.with.signal = 0.
IF  (ped.action = 1 | ped.action = 2) ped.crossing.with.signal = 1. 
IF  (reason = 15 | reason = 16) ped.crossing.with.signal = 0.
EXECUTE.

2 个答案:

答案 0 :(得分:2)

这不是一个不稳定的结果,而是由De Morgan's Laws解释的布尔代数的正确应用。

表达式(reason ~= 15 | reason ~= 16)等同于~(reason = 15 and reason = 16),在这种情况下永远不能评估为false(因为单个变量不能包含两个值)。从逻辑上讲,要使用的正确表达式为(reason ~= 15 & reason ~= 16)~(reason = 15 | reason = 16),尽管已经使用any函数指出更为直接。

答案 1 :(得分:1)

你的语法看起来不错,但实际上逻辑上不像你想要的那样Jay在他的回答中指出。

此外,您可以简化语法,以避免复杂的布尔否定:

COMPUTE ped.crossing.with.signal = ANY(ped.action, 1, 2) AND ANY(reason, 15, 16)=0.

以这种方式使用单个COMPUTE命令将使您的处理更有效/更快,更不用说更简约的代码了。