Fehlende Werte in "DO IF"-Strukturen
Fehlende Werte können die Ergebnisse aus DO IF
-Strukturen beeinträchtigen, da die Steuerung bei einer Auswertung des Ausdrucks als "fehlend" an diesem Punkt unverzüglich zum Befehl END IF
übergeht.
Um Probleme dieser Art zu vermeiden, sollten Sie zuerst versuchen, die fehlenden Werte in der DO IF
-Struktur zu behandeln, bevor Sie etwaige weitere Bedingungen auswerten.
*Stichprobendatenn mit fehlenden Daten erstellen.
DATA LIST FREE (",") /a.
BEGIN DATA
1, , 1 , ,
END DATA.
COMPUTE b=a.
* Folgendes funktioniert NICHT, weil die zweite Bedingung nie ausgewertet wird.
DO IF a=1.
- COMPUTE a1=1.
ELSE IF MISSING(a).
- COMPUTE a1=2.
END IF.
* Andererseits funktioniert Folgendes:
DO IF MISSING(b).
- COMPUTE b1=2.
ELSE IF b=1.
- COMPUTE b1=1.
END IF.
EXECUTE.
- Die erste
DO IF
-Struktur ergibt niemals den Wert 2 für a1, denn wenn a fehlt, wirdDO IF a=1
als fehlend ausgewertet und die Steuerung geht unverzüglich zuEND IF
über. Daher ist a1 entweder 1 oder fehlend. - In der zweiten
DO IF
-Struktur kümmern wir uns jedoch zuerst um die Bedingung für "fehlend". Wenn also der Wert b fehlt, wirdDO IF MISSING(b)
als true (wahr) ausgewertet und b1 wird auf 2 gesetzt. Andernfalls wird b1 auf 1 gesetzt.
In diesem Beispiel wird DO IF MISSING(b)
immer entweder als true (wahr) oder als false (falsch) ausgewertet, niemals als fehlend. Dadurch wird die Situation vermieden, in der die erste Bedingung möglicherweise als fehlend ausgewertet und die Kontrolle ohne Auswertung der anderen Bedingung(en) an END IF
weitergegeben wird.
a | b | a1 | b1 |
---|---|---|---|
E | E | E | E |
fehlend | fehlend | fehlend | Z |
E | E | E | E |
fehlend | fehlend | fehlend | Z |