Count the number of times record appears within a variable and apply count in a new variable

Viewed 38

SAS - I'd like to count the number of times a record appears within a variable (Ref) and apply a count in a new variable (Count) for these.

Eg.

Ref Count
1000 1
1001 1
2000 1
3000 1
1000 2
1000 3

What is the best way to do this?

3 Answers

That is what PROC FREQ is for. It will count the number of OBSERVATIONS for each value of a variable (or combination of variables).

proc freq data=have;
  tables REF ;
run;

If you want the result in a dataset then use the OUT= option of the TABLES statement.

proc freq data=have;
  tables REF / out=want;
run;

Managed to achive the results with the below code. Please note - Data needs to be sorted with a PROC SORT before running this.

DATA want;
set have;
BY Variable;

IF FIRST.Variable then counter = 1
   ELSE counter + 1;

RUN;

If you use the SAS hash object, you can do it with the original order intact

data have;
input Ref $;
datalines;
1000 
1001 
2000 
3000 
1000 
1000 
;

data want;

   if _N_ = 1 then do;                     
      dcl hash h();
      h.definekey('Ref');
      h.definedata('Count');
      h.definedone();
   end;

   set have;            

   if h.find() ne 0 then Count = 1;  
   else                  Count + 1;  

   h.replace();                  

run;
Related