Missing Values in DO IF Structures

Missing values can affect the results from DO IF structures because if the expression evaluates to missing, then control passes immediately to the END IF command at that point. To avoid this type of problem, you should attempt to deal with missing values first in the DO IF structure before evaluating any other conditions.

*create sample data with missing data.
DATA LIST FREE (",") /a.
BEGIN DATA
1, , 1 , ,
END DATA.

COMPUTE b=a.

* The following does NOT work since the second condition is never evaluated.
DO IF a=1.
- COMPUTE a1=1.
ELSE IF MISSING(a).
- COMPUTE a1=2.
END IF.

* On the other hand the following works.
DO IF MISSING(b).
- COMPUTE b1=2.
ELSE IF b=1.
- COMPUTE b1=1.
END IF.
EXECUTE.
  • The first DO IF will never yield a value of 2 for a1, because if a is missing, then DO IF a=1 evaluates as missing, and control passes immediately to END IF. So a1 will either be 1 or missing.
  • In the second DO IF, however, we take care of the missing condition first; so if the value of b is missing, DO IF MISSING(b) evaluates as true and b1 is set to 2; otherwise, b1 is set to 1.

In this example, DO IF MISSING(b) will always evaluate as either true or false, never as missing, thereby eliminating the situation in which the first condition might evaluate as missing and pass control to END IF without evaluating the other condition(s).

Table 1. DO IF results with missing values
a b a1 b1
1 1 1 1
missing missing missing 2
1 1 1 1
missing missing missing 2