2015-08-27 37 views
2

下面的我的SPSS語法代碼不會生成預期的結果。即使reason等於15或16,它將標誌ped.crossing.with.signal爲1基本的IF AND OR語句的結果SPSS中的語法

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. 

回答

0

你的語法看起來不錯,但事實上在邏輯上並不像你打算的那樣,因爲Jay在他的回答中指出。

此外,您還可以簡化的語法如下,以避免複雜的布爾否定:

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

以這種方式使用單一COMPUTE命令將讓你的處理更高效/更快,更何況更簡潔的代碼還。

+0

實際上,OP的代碼在語法上合理,但邏輯上有缺陷。 – Jay

+0

謝謝你的澄清,你確實是對的! –

1

這不是一個不可靠的結果,而是布爾代數的正確應用,由De Morgan's Laws解釋。

表達式(reason ~= 15 | reason ~= 16)相當於~(reason = 15 and reason = 16),在這種情況下,它永遠不會計算爲假(因爲單個變量不能包含兩個值)。從邏輯上講,使用的正確表達式將是(reason ~= 15 & reason ~= 16)~(reason = 15 | reason = 16),但正如已經指出的那樣,使用any函數更直接。