data student;
input class$ name $;
cards;
a wang
a li
a sun
a quan
a bai
b jin
b zhang
b li
b han
c qian
c yu
c li
c cui
c huang
;
run;
proc sort data=student;
by name;
run;
data student_flagged;
set student;
retain flag;
by name;
if first.name then flag=1;
if 1-first.name then flag=flag+1;
new_name=cats(name,flag);
drop flag;
run;
data test;
input class $ student $;
cards;
a wang
a li
a sun
a quan
a bai
b jin
b zhang
b li
b han
c qian
c yu
c li
c cui
c huang
;
run;
data test1;
id=_n_;
set test;
run;
proc sort data=test1 out=test2 nouniquekey;
by student;
run;
data test3;
set test2;
if class="a" then student=cats(student,"1");
else if class="b" then student=cats(student,"2");
else if class="c" then student=cats(student,"3");
run;
data test4;
update test1 test3;
by id;
drop id;
run;