What is a method for assigning first.VAR and last.VAR to the BY group variable on unsorted data?
Use the notsorted option, but be aware that this can cause false results.
There isn't one in that sense. first/last means a record which appears first or last in a sorted group - that being said if you know your groupings and what order would highlight first or last then you could programmatically do it. I.e. if I have a set of data by id, with a date, then I could assume that date sequential would be the order and do:
proc sql;
create table WANT as
select A.*,
case when A.DATE=B.MIN_DATE then 1
else 0 end as FIRST,
case when A.DATE=B.MAX_DATE then 1
else 0 end as LAST
from HAVE A
left join (select distinct ID,
min(DATE) as MIN_DATE,
max(DATE) as MAX_DATE
from HAVE
group by ID) B
on A.ID=B.ID;
quit;
However, why? Is order of your data that important? If so create a temporary variable called sort, and assign it to _n_. Sort your data and get first/last, then sort your data by the temporary variable setting it back to old sort. Again, why bother though.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.