来自SPSS中的基本IF和或语法的不稳定结果



下面的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.

这不是一个不稳定的结果,而是布尔代数的正确应用,由德摩根定律解释。

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

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

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

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

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

最新更新