Hi @Tom and @mkeintz
Thank you for your explanantion, I have some points not clear here
@Tom wrote:
In theory SAS might be able to allow FIRST. and LAST. references in WHERE statements to work, since at the time the WHERE executes it will be reading the data. But that would not work if the WHERE is going to push into a remote database.
Can you please explain this quotation for me, I am still ambiguous about that.
So if I filter out the some records with a WHERE statement then the FIRST.GROUP flag means the first observation in the group that makes it through the filter
Yes, it is right.
But what I really want to ask is: when the complier goes through the by statement, it means that the compiler already read the first.observation and last.observation to the attributes of the output datatset.
Let's say an example:
data singlestate;
set pg2.np_acres;
by ParkName State;
where first.state=1 AND last.state=1 ;
run;
Regarding the code below, before going to the first iteration, the compiler will read the whole datastep to decide what is in the attribute of the output datatset (outsourcing columns, flag columns, _error_,_n_). So, my understanding is that the attributes will include: all the variables from dataset pg2.np_acres,_error_,_n_, and first.state, and last.state. Then afterward, at the excution phase, where can treat first.state or last.state easily . But yeah, we all know that's wrong but I am not clear about that yet.
I am aware that we can use if clause easily in this situation, but I want to clarify how it works behind the scene that I can control the code down the roads,
Warmest regards,
... View more