Hi everyone. Recently i was asked by apprentice about SAS function end=eof and to my shocking, i know nothing about this.
Upon Google search, i only managed to find 1 PDF file about end of file but i still dont understand the purpose of it.
The link is :
http://support.sas.com/resources/papers/proceedings09/074-2009.pdf
Does anyone have a better explanation or elaboration of end=eof ? I have never used that in my life.
You can specify end=eof in the set statement. Eof will then be a binary variable (0/1) with the value 1 for the last observation in the data set and 0 otherwise. Eof is automatically dropped. However, for demonstrational purposes, I assign the value to another variable var below. See the example below
data test;
set sashelp.class end=eof;
var=eof;
run;
proc print data=test;
run;
This enabled you to eg. keep only the last observation in a data set like this
data test2;
set sashelp.class end=eof;
if eof=1;
run;
You can specify end=eof in the set statement. Eof will then be a binary variable (0/1) with the value 1 for the last observation in the data set and 0 otherwise. Eof is automatically dropped. However, for demonstrational purposes, I assign the value to another variable var below. See the example below
data test;
set sashelp.class end=eof;
var=eof;
run;
proc print data=test;
run;
This enabled you to eg. keep only the last observation in a data set like this
data test2;
set sashelp.class end=eof;
if eof=1;
run;
Thanks for the clear explanation and sample.
To my understanding, this would be the only purpose of using end=eof right?
No. But it is a classic use of the end= Option 🙂
Sometimes users want to keep all observation except the last one. Also a nice use for the End= Option.
There are multiple uses for this. Imagine you need to write a csv where the last line is expected to hold the number of records only:
data _null_;
file "myoutfile.csv" dlm=',' dsd;
set sashelp.class end=eof;
retain recordcount 0;
if _n_ = 1 then put 'name,sex,age,height,weight';
put name sex age height weight;
recordcount + 1;
if eof then put recordcount;
run;
@imdickson wrote:
Thanks for the clear explanation and sample.
To my understanding, this would be the only purpose of using end=eof right?
There are quite a few use cases for the end= dataset option. You use it whenever something needs to happen when reading the last observation from table(s). Below another common use case.
data demo;
do while(not eof);
set sashelp.class end=eof;
output;
end;
stop;
run;
Hi @imdickson
I have a comment as a supplement to @PeterClemmensen 's good explanation. You will get a lot of hits in google, if you search for "sas end = dataset option" instead.
The SAS END= dataset option can take any valid SAS variable name as argument. The use of "eof" (end-of-file) as variable name is a tradition from way back, but not part of the syntax, so this works the same way;
data a;
do i = 1 to 10; output;
end;
data b; set a end=last_observation;
if last_observation then put i=;
run;
If a data step has more than one Set statement, it is often useful to have a check for last observation in each statement, which requires different variable names.
Please not that I do not recommend using that particular combination: end=eof
Because eof is also an option for a set statement which
As is eov
@sustagens please start a new thread for this question. That way, we keep different subjects apart and help future users. Thank you
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
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.
Ready to level-up your skills? Choose your own adventure.