DO IF 結構的遺漏值
遺漏值會影響來自 DO IF 結構的結果,因為如果表示式評估為遺漏,則控制將立即傳遞至該點的 END IF 指令。為避免此類型的問題,您應於評估任何情況之前先嘗試處理 DO IF 結構中的遺漏值。
*create sample data with missing data.
DATA LIST FREE (",") /a.
BEGIN DATA
1, , 1 , ,
END DATA.
COMPUTE b=a.
* 下列內容不起作用,因為尚未評估第二種狀況。
DO IF a=1.
- COMPUTE a1=1.
ELSE IF MISSING(a).
- COMPUTE a1=2.
END IF.
* 另一方面,下列內容起作用。
DO IF MISSING(b).
- COMPUTE b1=2.
ELSE IF b=1.
- COMPUTE b1=1.
END IF.EXECUTE.
- 第一個 DO IF 對於 a1 將永遠不會產生 2 的值,因為如果 a 遺漏,則 DO IF a=1 評估為遺漏,且控制立即傳遞至 END IF。 所以 a1 將為 1 或遺漏。
- 然而,在第二個 DO IF 中,我們先處理遺漏的狀況,所以如果 b 的值遺漏,DO IF MISSING(b) 將評估為 true 且 b1 將設定為 2;否則 b1 將設定為 1。
在此範例中,DO IF MISSING(b) 將一律評估為 true 或者 false,且永不為遺漏,就可排除第一個狀況可能不經評估其他狀況便評估為遺漏且傳遞控制項至 END IF 的情況。
a | b | a1 | b1 |
---|---|---|---|
1 | 1 | 1 | 1 |
遺漏 | 遺漏 | 遺漏 | 2 |
1 | 1 | 1 | 1 |
遺漏 | 遺漏 | 遺漏 | 2 |