## Enumerating Variable

Solved
Regular Contributor
Posts: 247

# Enumerating Variable

[ Edited ]

Hi...I am having problems with incrementing a count. For each ID, starting at 1 and increment by 1 when their is a change in the Program type and retain the count and increment by 1 when there is another change in the Program type. Thanks.

DATA GROUP58B;

SET GROUP58A;

COUNT+1;

RETAIN COUNT;

BY ID;

IF FIRST.ID THEN COUNT=1;

IF ID = LAG(ID) AND PROGRAM = LAG(PROGRAM) THEN COUNT = 1;

RUN;

Have:

 DATE ID PROGRAM COUNT 20130219 130439 HCP 1 20140121 130439 HCP 1 20140403 130439 HCP 1 20160314 130439 PCP 2 20160314 130439 PCP 1 20160415 130439 PCP 1

Want:

 DATE ID PROGRAM COUNT 20130219 130439 HCP 1 20140121 130439 HCP 1 20140403 130439 HCP 1 20160314 130439 PCP 2 20160314 130439 PCP 2 20160415 130439 PCP 2

Accepted Solutions
Solution
‎08-18-2016 09:31 AM
Super User
Posts: 23,663

## Re: Enumerating Variable

``````DATA GROUP58B;
SET GROUP58A;
COUNT+1;  *wrong position, this would be the first step, move it later in the program;
RETAIN COUNT;
BY ID;
IF FIRST.ID THEN COUNT=1;
IF ID = LAG(ID) AND PROGRAM = LAG(PROGRAM) THEN COUNT = 1; *This doesn't make sense, its what you use first for to avoid checking previous values;
RUN;``````

The code below should work

``````DATA GROUP58B;
SET GROUP58A;

RETAIN COUNT;
BY ID PROGRAM;
IF FIRST.ID THEN COUNT=0;
if first.program then count+1;

RUN;``````

All Replies
Solution
‎08-18-2016 09:31 AM
Super User
Posts: 23,663

## Re: Enumerating Variable

``````DATA GROUP58B;
SET GROUP58A;
COUNT+1;  *wrong position, this would be the first step, move it later in the program;
RETAIN COUNT;
BY ID;
IF FIRST.ID THEN COUNT=1;
IF ID = LAG(ID) AND PROGRAM = LAG(PROGRAM) THEN COUNT = 1; *This doesn't make sense, its what you use first for to avoid checking previous values;
RUN;``````

The code below should work

``````DATA GROUP58B;
SET GROUP58A;

RETAIN COUNT;
BY ID PROGRAM;
IF FIRST.ID THEN COUNT=0;
if first.program then count+1;

RUN;``````

☑ This topic is solved.