Solved
Contributor
Posts: 45

# assign serial number

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!

Best regards,

Bill

Accepted Solutions
Solution
‎02-08-2018 03:03 AM
Valued Guide
Posts: 624

## Re: assign serial number

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

All Replies
Solution
‎02-08-2018 03:03 AM
Valued Guide
Posts: 624

## Re: assign serial number

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;```
Contributor
Posts: 45

## Re: assign serial number

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.

☑ This topic is solved.