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;
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.