Hi everyone.
I have the following data step:
data file;
input ID $ group;
cards;
1 0
1 1
2 0
3
3 0
4 1
5
;
run;
I would like to recode the var group. If an ID has a duplicate (eg. 1 and 3), the row value will take on the maximum group.
The column would look like
ID Group Group_r
1 0 1
1 1 1
2 0 0
3 0
3 0 0
4 1 1
5
Thanks.
Methinks the simplest is:
data have ;
input ID $ group ;
cards ;
1 0
1 1
2 0
3 .
3 0
4 1
5 .
;
run ;
proc sql ;
create table want as select *, max (group) as group_r from have group id ;
quit ;
If you want the DATA step instead, could be:
data want ;
set have (in=h1) have (in=h2) ;
by id ;
retain group_r ;
if first.id then group_r = . ;
if h1 then group_r = group_r max group ;
if h2 ;
run ;
The alternative below is a bit more verbose, but it may make more sense logically (depending on whom you ask):
data want ;
do _n_ = 1 by 1 until (last.id) ;
set have ;
by ID ;
group_r = group_r max group ;
end ;
do _n_ = 1 to _n_ ;
set have ;
output ;
end ;
run ;
Kind regards
Paul D.
data file;
input ID $ group;
cards;
1 0
1 1
2 0
3 .
3 0
4 1
5 .
;
run;
proc sql;
create table want as
select *,max(group) as group_r
from file
group by id;
quit;
Methinks the simplest is:
data have ;
input ID $ group ;
cards ;
1 0
1 1
2 0
3 .
3 0
4 1
5 .
;
run ;
proc sql ;
create table want as select *, max (group) as group_r from have group id ;
quit ;
If you want the DATA step instead, could be:
data want ;
set have (in=h1) have (in=h2) ;
by id ;
retain group_r ;
if first.id then group_r = . ;
if h1 then group_r = group_r max group ;
if h2 ;
run ;
The alternative below is a bit more verbose, but it may make more sense logically (depending on whom you ask):
data want ;
do _n_ = 1 by 1 until (last.id) ;
set have ;
by ID ;
group_r = group_r max group ;
end ;
do _n_ = 1 to _n_ ;
set have ;
output ;
end ;
run ;
Kind regards
Paul D.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.