O'Reilly logo

SAS 9.4 Language Reference, 6th Edition by SAS Institute

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

This DATA step produces a SAS data set with the following variable values:
OBS X Y
1 4 .
2 1 2
3 3 .
4 1 2
When X equals 1, the value of Y is set to 2. Since no other statements set Y's value when
X is not equal to 1, Y remains missing (.) for those observations.
When Reading a SAS Data Set
When variables are read with a SET, MERGE, or UPDATE statement, SAS sets the
values to missing only before the first iteration of the DATA step. (If you use a BY
statement, the variable values are also set to missing when the BY group changes.) The
variables retain their values until new values become available (for example, through an
assignment statement or through the next execution of the SET, MERGE, or UPDATE
statement). Variables created with options in the SET, MERGE, and UPDATE statements
also retain their values from one iteration to the next.
When all rows in a data set in a match-merge operation (with a BY statement) are
processed, the variables in the output data set retain their values as described earlier.
That is, as long as there is no change in the BY value in effect when all of the rows in the
data set have been processed, the variables in the output data set retain their values from
the final observation. FIRST.variable and LAST.variable, the automatic variables that are
generated by the BY statement, both retain their values. Their initial value is 1.
When the BY value changes, the variables are set to missing and remain missing because
the data set contains no additional observations to provide replacement values. When all
of the rows in a data set in a one-to-one merge operation (without a BY statement) have
been processed, the variables in the output data set are set to missing and remain
missing.
When Missing Values Are Generated by SAS
Propagation of Missing Values in Calculations
SAS assigns missing values to prevent problems from arising. If you use a missing value
in an arithmetic calculation, SAS sets the result of that calculation to missing. Then, if
you use that result in another calculation, the next result is also missing. This action is
called propagation of missing values. SAS prints notes in the log to notify you which
arithmetic expressions have missing values and when they were created. However,
processing continues.
Invalid Operations
SAS prints a note in the log and assigns a missing value to the result if you try to
perform an invalid operation, such as the following:
dividing by zero
taking the logarithm of zero
When Missing Values Are Generated by SAS 87
using an expression to produce a number too large to be represented as a floating-
point number (known as overflow)
Invalid Character-to-Numeric Conversions
SAS automatically converts character values to numeric values if a character variable is
used in an arithmetic expression. If a character value contains nonnumerical information
and SAS tries to convert it to a numeric value, a note is printed in the log, the result of
the conversion is set to missing, and the _ERROR_ automatic variable is set to 1.
Creating Special Missing Values
The result of any numeric missing value in a SAS expression is a period. Thus, both
special missing values and ordinary numeric missing values propagate as a period.
data a;
x=.d;
y=x+1;
put y=;
run;
This DATA step results in the following log:
Log 5.1 SAS Log Results for a Missing Value
130 data a;
131 x=.d;
132 y=x+1;
133 put y=;
134 run;
y=.
NOTE: Missing values were generated as a result of performing an operation on
missing values.
Each place is given by: (Number of times) at (Line):(Column).
1 at 132:10
NOTE: The data set WORK.A has 1 observations and 2 variables.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
Preventing Propagation of Missing Values
If you do not want missing values to propagate in your arithmetic expressions, you can
omit missing values from computations by using the sample statistic functions. For a list
of these functions, see “SAS Functions and CALL Routines by Category” in SAS
Functions and CALL Routines: Reference. For example, consider the following DATA
step:
data test;
x=.;
y=5;
a=x+y;
b=sum(x,y);
c=5;
c+x;
88 Chapter 5 Missing Values

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required