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
函数更直接。
我下面的 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
函数更直接。