Dear all,
For the following sample dataset I need to retrieve the last value of DATE and TIME within each group (variable ID).
data have;
| ID | DATE | TIME | 
| 500001 | 10/08/2018 | 141110 | 
| 500001 | 21/08/2018 | 104404 | 
| 500001 | 22/08/2018 | 140100 | 
| 500002 | 12/06/2018 | 103810 | 
| 500002 | 10/08/2018 | 153104 | 
| 500002 | 14/08/2018 | 125737 | 
| 500003 | 04/08/2018 | 094524 | 
| 500003 | 06/08/2018 | 134535 | 
| 500003 | 08/08/2018 | 115742 | 
| 500003 | 10/08/2018 | 164127 | 
| 500003 | 12/08/2018 | 092203 | 
| 500003 | 14/08/2018 | 105922 | 
;
run;
Therefore the output shall be:
| ID | DATE | TIME | 
| 500001 | 22/08/2018 | 140100 | 
| 500002 | 14/08/2018 | 125737 | 
| 500003 | 14/08/2018 | 105922 | 
Thank you all.
data have;
input ID $	DATE  :ddmmyy10.	TIME;
format date ddmmyy10.  ;
cards;
500001	10/08/2018	141110
500001	21/08/2018	104404
500001	22/08/2018	140100
500002	12/06/2018	103810
500002	10/08/2018	153104
500002	14/08/2018	125737
500003	04/08/2018	094524
500003	06/08/2018	134535
500003	08/08/2018	115742
500003	10/08/2018	164127
500003	12/08/2018	092203
500003	14/08/2018	105922
;
data want;
if 0 then set have;
call missing(dt);
do until(last.id);
set have;
by id;
dt=dt<>dhms(date,0,0,time);
end;
drop dt;
run;
					
				
			
			
				
			
			
			
				
			
			
			
			
			
		data have;
input ID $	DATE  :ddmmyy10.	TIME;
format date ddmmyy10.  ;
cards;
500001	10/08/2018	141110
500001	21/08/2018	104404
500001	22/08/2018	140100
500002	12/06/2018	103810
500002	10/08/2018	153104
500002	14/08/2018	125737
500003	04/08/2018	094524
500003	06/08/2018	134535
500003	08/08/2018	115742
500003	10/08/2018	164127
500003	12/08/2018	092203
500003	14/08/2018	105922
;
proc sql;
create table want(drop=dt) as
select *,dhms(date,0,0,time) as dt
from have
group by id
having dt=max(dt);
quit;
					
				
			
			
				
			
			
			
			
			
			
			
		data have;
input ID $	DATE  :ddmmyy10.	TIME;
format date ddmmyy10.  ;
cards;
500001	10/08/2018	141110
500001	21/08/2018	104404
500001	22/08/2018	140100
500002	12/06/2018	103810
500002	10/08/2018	153104
500002	14/08/2018	125737
500003	04/08/2018	094524
500003	06/08/2018	134535
500003	08/08/2018	115742
500003	10/08/2018	164127
500003	12/08/2018	092203
500003	14/08/2018	105922
;
data want;
if 0 then set have;
call missing(dt);
do until(last.id);
set have;
by id;
dt=dt<>dhms(date,0,0,time);
end;
drop dt;
run;
					
				
			
			
				
			
			
			
			
			
			
			
		If the data is sorted so that the last is correct then
data want; set have; by id; if last.id; run;
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
Check out this tutorial series to learn how to build your own steps in SAS Studio.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.