Help using Base SAS procedures

Enumeration by group

Accepted Solution Solved
Reply
Frequent Contributor
Frequent Contributor
Posts: 139
Accepted Solution

Enumeration by group

Hi all;

I am trying to enumerate a group with a counter-

So for example if I have data that looks like this-

FAC        YEAR

A               2008

A              2009

A              2010

B              2008

B             2009

B              2010

What I want is

FAC        YEAR    CT

A               2008    1

A              2009     1

A              2010     1

B              2008    2

B             2009     2

B             2010   2

The code I have currently is:

DATA plots2;

CT+1;

SET plots;

BY FAC_ID;

IF FIRST.FAC_ID THEN CT=1;

RUN; 

Which gives me:

FAC        YEAR    CT

A               2008    1

A              2009     2

A              2010     3

B              2008    1

B             2009     2

B             2010   3 

Which is not what I want. Any help appreciated.  I have attempted to use lag & retain functions, much to the same effect.

Thanks

Lawrence


Accepted Solutions
Solution
‎04-23-2013 03:47 PM
Respected Advisor
Posts: 4,937

Re: Enumeration by group

You were almost there...

DATA plots2;

SET plots;

BY FAC_ID;

IF FIRST.FAC_ID THEN CT+1;

RUN; 

or simpler still

DATA plots2;

SET plots;

BY FAC_ID;

CT + FIRST.FAC_ID;

RUN;

PG

PG

View solution in original post


All Replies
Solution
‎04-23-2013 03:47 PM
Respected Advisor
Posts: 4,937

Re: Enumeration by group

You were almost there...

DATA plots2;

SET plots;

BY FAC_ID;

IF FIRST.FAC_ID THEN CT+1;

RUN; 

or simpler still

DATA plots2;

SET plots;

BY FAC_ID;

CT + FIRST.FAC_ID;

RUN;

PG

PG
Frequent Contributor
Frequent Contributor
Posts: 139

Re: Enumeration by group

Many Thanks PG!

Lawrence

Respected Advisor
Posts: 3,156

Re: Enumeration by group

If using DOW:

DATA plots2;

do until (last.fac_id);

   SET plots;

   BY FAC_ID;

   CT=_n_;

    output;

end;

RUN;


Haikuo

Super User
Posts: 10,048

Re: Enumeration by group

Or lag function.

IF FAC_ID ne lag(FAC_ID ) THEN CT+1;

Ksharp

Frequent Contributor
Frequent Contributor
Posts: 139

Re: Enumeration by group

Thanks everyone.  I knew I was close but this helped !

Lawrence

🔒 This topic is solved and locked.

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

Discussion stats
  • 5 replies
  • 202 views
  • 0 likes
  • 4 in conversation