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.
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.