Solved
Contributor
Posts: 25

# Create a variable count that increments for each duplicate variable in a dataset

[ Edited ]

Hello all,

Please can you assist with the following problem? I need to count the number of repeated characters in a dataset for each repeated "char" data.

Original data:

 Num Char 100060002 A 100060004 A 100060008 A 100060010 B 100060013 B 100060014 B 100060015 C 100060020 C 100060021 D

Required output:

 Num Char Count 100060002 A 1 100060004 A 2 100060008 A 3 100060010 B 1 100060013 B 2 100060014 B 3 100060015 C 1 100060020 C 2 100060021 D 1

Any assitance would be greatly appreciated.

My code thus far:

```DATA TEST;
SET TEST;
BY CHAR;
PUT COUNT 1.;

IF FIRST.CHAR THEN;
COUNT=0;
COUNT+1;
RUN;```

Accepted Solutions
Solution
‎01-24-2017 04:11 AM
Super User
Posts: 10,259

## Re: Create a variable count that increments for each duplicate variable in a dataset

First of all, this is the way to post example data:

``````data have;
input num char \$;
cards;
100060002 A
100060004 A
100060008 A
100060010 B
100060013 B
100060014 B
100060015 C
100060020 C
100060021 D
;
run;``````

It allows us to recreate your data with a simple copy/paste and run.

Next, your use of the if - then is erroneous. The semicolon immediately after the then causes the conditional statement to end.

This (applied to test data from above) will do it:

``````data want;
set have;
by char;
if first.char
then count = 1;
else count + 1;
run;``````
---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code

All Replies
Solution
‎01-24-2017 04:11 AM
Super User
Posts: 10,259

## Re: Create a variable count that increments for each duplicate variable in a dataset

First of all, this is the way to post example data:

``````data have;
input num char \$;
cards;
100060002 A
100060004 A
100060008 A
100060010 B
100060013 B
100060014 B
100060015 C
100060020 C
100060021 D
;
run;``````

It allows us to recreate your data with a simple copy/paste and run.

Next, your use of the if - then is erroneous. The semicolon immediately after the then causes the conditional statement to end.

This (applied to test data from above) will do it:

``````data want;
set have;
by char;
if first.char
then count = 1;
else count + 1;
run;``````
---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code
Super Contributor
Posts: 474

## Re: Create a variable count that increments for each duplicate variable in a dataset

[ Edited ]

Hi, I think you've got it right, just loose the ; after the then

``````
DATA TEST;
SET TEST;
BY CHAR;
PUT COUNT 1.;

IF FIRST.CHAR THEN COUNT=0;
COUNT+1;
RUN;``````

Daniel Santos @ www.cgd.pt

Super User
Posts: 10,259

## Re: Create a variable count that increments for each duplicate variable in a dataset

[ Edited ]

Addendum: if the char variable does not come in a strictly ascending sequence, use

``by char notsorted;``

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code
☑ This topic is solved.