Hi guys,
I've encountered a problem that I couldn't understand why couldn't be solved.
Please take a look at the following dataset: (ID and Level are what I have, while Sn is what I want to generate)
ID Level Sn
1 L 1
1 L 1
.
.
.
1 M 2
1 M 2
.
.
.
2 H 3
2 H 3
.
.
.
2 L 4
2 L 4
.
.
.
2 M 5
2 M 5
.
.
.
2 H 6
2 H 6
.
.
.
General rule is that every subject has several records on three levels, and what I want to do is to generate serial number according to different levels for each subject.
I know it can be achieved by the combination of "do loop" and "by" statement.
However, the work just couldn't be done. (still trying)
Therefore, I post it to ask you guys for some help!
Thanks in advance!
Best regards,
Bill
Try this:
data work.have;
length id 8 level $ 1;
input id level;
datalines;
1 L
1 L
1 M
1 M
2 H
2 H
2 L
2 L
2 H
2 H
;
run;
data work.want;
set work.have;
length serial 8;
retain serial 0;
if level ^= lag(level) then do;
serial = serial + 1;
end;
run;
Try this:
data work.have;
length id 8 level $ 1;
input id level;
datalines;
1 L
1 L
1 M
1 M
2 H
2 H
2 L
2 L
2 H
2 H
;
run;
data work.want;
set work.have;
length serial 8;
retain serial 0;
if level ^= lag(level) then do;
serial = serial + 1;
end;
run;
Thanks, andreas!
I guess the problem is on "retain..."
However, I don't know why it should exist if there's already "serial=serial+1"
But still thanks, you spot my blind point.
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!
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.