DATA Step, Macro, Functions and more

assign serial number

Accepted Solution Solved
Reply
Contributor
Posts: 45
Accepted Solution

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!

 

Thanks in advance!

 

Best regards, 

Bill


Accepted Solutions
Solution
‎02-08-2018 03:03 AM
Super Contributor
Posts: 500

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;

View solution in original post


All Replies
Solution
‎02-08-2018 03:03 AM
Super Contributor
Posts: 500

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

Posted in reply to andreas_lds

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.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 159 views
  • 1 like
  • 2 in conversation