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, wird DO IF a=1 als fehlend ausgewertet und die Steuerung geht unverzüglich zu END 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, wird DO 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.

Tabelle 1. "DO IF"-Ergebnisse mit fehlenden Werten
a b a1 b1
E E E E
fehlend fehlend fehlend Z
E E E E
fehlend fehlend fehlend Z