SPSS 中基本 IF AND OR 语法的奇怪结果

Wonky results from basic IF AND OR Syntax in 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.

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

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

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

以这种方式使用单个 COMPUTE 命令将使您的处理更多 efficient/faster,更不用说代码也更简洁了。

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

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