I have a data set as below.
country code | snapshot date |
canada | 1/3/2014 |
canada | 1/4/2014 |
us | 1/5/2014 |
us | 1/6/2014 |
us | 1/7/2014 |
canada | 1/8/2014 |
canada | 1/9/2014 |
I would like to create a result table as below.
country code | start snapshot date | end snapshot date |
canada | 1/3/2014 | 1/4/2014 |
us | 1/5/2014 | 1/7/2014 |
canada | 1/8/2014 | 1/9/2014 |
I can only create the start snapshot date by rank and join the same table, and am having trouble to get the end snapshot date.
data have; input country $ date : mmddyy10.; format date mmddyy10.; cards; canada 1/3/2014 canada 1/4/2014 us 1/5/2014 us 1/6/2014 us 1/7/2014 canada 1/8/2014 canada 1/9/2014 ; run; data want; set have; by country notsorted; retain start; if first.country then start=date; if last.country then do; end=date;output;end; drop date; format start end mmddyy10.; run;
Xia Keshan
thank you. i didn't think it this way, the sas way. i think i was too much into the sql way.
The SQL way
proc sql;
create table daily_snapshot as
select country_code, min(date) as start_date, max(date) as end_date
from have
group by country_code
order by country_code;
quit;
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.