Hello,
The following program :
data empty_class;
set sashelp.class;
stop;
run;
data _NULL_;
put "1";
eof=0;
do until (eof);
set sashelp.class end=eof;
put name;
end;
put "2";
eof=0;
do until (eof);
set empty_class end=eof;
put name;
end;
put "3";
run;
gives the following output in the log :
1 Alfred Alice Barbara Carol Henry James Jane Janet Jeffrey John Joyce Judy Louise Mary Philip Robert Ronald Thomas William 2 NOTE: There were 19 observations read from the data set SASHELP.CLASS. NOTE: There were 0 observations read from the data set WORK.EMPTY_CLASS. NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds
Why is "3" not displayed and how can it be fixed ?
Thanks !
Trying to read from an empty dataset immediately throws you to the end of the data step, bypassing all remaining statements.
Compare this:
data _null_;
put 'before';
set empty_class;
put 'after';
run;
Trying to read from an empty dataset immediately throws you to the end of the data step, bypassing all remaining statements.
Compare this:
data _null_;
put 'before';
set empty_class;
put 'after';
run;
Because the SET statement ends the DATA step because there are no observations to read in your second do until loop
Thank you @Kurt_Bremser and @PeterClemmensen.
I thought the set on sashelp.class would avoid early termination.
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.