IF-THEN/ELSE Statements¶
IF-THEN and IF-THEN/ELSE statements are conditional statements in SAS that we can use to control the execution of our code. These can be used in a DATA step or in open code in a %macro with a % preceding the key words as illustrated below.
In a DATA step
data out.if_then_example;
set out.fake_micro(keep = pik mom_pik dad_pik);
* Identify parent status;
if mom_pik ~= "" and dad_pik ~= "" then singleparent = 0;
else singleparent = 1;
run;
| pik | mom_pik | dad_pik | singleparent | |
|---|---|---|---|---|
| 0 | 141 | 173 | NaN | 1.0 |
| 1 | 138 | 149 | NaN | 1.0 |
| 2 | 177 | NaN | 003 | 1.0 |
| 3 | 146 | 013 | 004 | 0.0 |
| 4 | 104 | 187 | 005 | 0.0 |
| 5 | 144 | NaN | 006 | 1.0 |
| 6 | 083 | 025 | 007 | 0.0 |
| 7 | 115 | NaN | 008 | 1.0 |
| 8 | 170 | 157 | 009 | 0.0 |
| 9 | 118 | NaN | 010 | 1.0 |
| 10 | 085 | NaN | 011 | 1.0 |
| 11 | 051 | 058 | NaN | 1.0 |
| 12 | 197 | 156 | 013 | 0.0 |
| 13 | 054 | 034 | NaN | 1.0 |
| 14 | 139 | NaN | 015 | 1.0 |
| 15 | 111 | 004 | NaN | 1.0 |
| 16 | 008 | NaN | 017 | 1.0 |
| 17 | 055 | NaN | 018 | 1.0 |
| 18 | 167 | 072 | NaN | 1.0 |
| 19 | 160 | NaN | 020 | 1.0 |
| 20 | 163 | 112 | NaN | 1.0 |
| 21 | 030 | NaN | 022 | 1.0 |
| 22 | 097 | NaN | 023 | 1.0 |
| 23 | 026 | NaN | 024 | 1.0 |
| 24 | 039 | NaN | 025 | 1.0 |
| 25 | 179 | NaN | 026 | 1.0 |
| 26 | 154 | NaN | 027 | 1.0 |
| 27 | 047 | NaN | 028 | 1.0 |
| 28 | 009 | NaN | 029 | 1.0 |
| 29 | 103 | NaN | 030 | 1.0 |
| 30 | 188 | NaN | 031 | 1.0 |
| 31 | 028 | NaN | 032 | 1.0 |
| 32 | 041 | NaN | 033 | 1.0 |
| 33 | 001 | NaN | 034 | 1.0 |
| 34 | 162 | NaN | 035 | 1.0 |
| 35 | 064 | 136 | 036 | 0.0 |
| 36 | 175 | NaN | 037 | 1.0 |
| 37 | 183 | NaN | 038 | 1.0 |
| 38 | 093 | NaN | 039 | 1.0 |
| 39 | 136 | NaN | 040 | 1.0 |
| 40 | 140 | 191 | 041 | 0.0 |
| 41 | 003 | 001 | NaN | 1.0 |
| 42 | 176 | NaN | 043 | 1.0 |
| 43 | 108 | 090 | 044 | 0.0 |
| 44 | 194 | NaN | 045 | 1.0 |
| 45 | 187 | 055 | 046 | 0.0 |
| 46 | 015 | 161 | 047 | 0.0 |
| 47 | 062 | NaN | 048 | 1.0 |
| 48 | 130 | NaN | 049 | 1.0 |
| 49 | 029 | NaN | 050 | 1.0 |
And in open code
%macro ifthen(year);
%if %sysfunc(mod(&year, 2)) = 0 %then %put Even.;
%else %put Odd.;
%mend ifthen;
%ifthen(1);
%ifthen(2);
581 %ifthen(1);
Odd.
582 %ifthen(2);
Even.
IF-THEN/ELSE DO Statements¶
Sometimes we want to execute a series of statements depending on a certain condition rather than just one statement. In these instances, we use IF-THEN/ELSE DO statements. The syntax for these statements in a DATA step is:
data out.output;
set in.input;
* IF-THEN DO;
if (cond) then do;
/* SAS statements if condition is met */
end;
* IF-THEN/ELSE DO;
if (cond) then do;
/* SAS statements if condition is met */
end;
else do;
/* SAS statements if condition is not met */
end;
run;
Or in open code (wrapped in a %macro)
* IF-THEN DO;
%macro ifthendo;
%if (cond) %then %do;
/* SAS statements if condition is met */
%end;
* IF-THEN/ELSE DO;
%if (cond) %then %do;
/* SAS statements if condition is met */
%end;
%else %do;
/* SAS statements if condition is not met */
%end;
%mend ifthendo;