BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
stancemcgraw
Obsidian | Level 7

Hello,

 

   I have a dataset that shows the type of procedure, listed under proc1 and the ID (studynum). Each studynum may have several different types of procedure/procedure groups that occurred on different dates. I want to count each type of observation by patient.

 

Data have:

Studynum      Proc1                      Proc date

1                  Debridement             8/18/15

1                   Other                       9/8/15 

1                   Other                       8/3/15

1                   Woundvac                8/4/15

1                   Debridement            8/4/15

2                   Amputation              10/5/15

2                   Other                      10/6/15

2                   Other                       10/7/15

 

Data Want:

Studynum    Debridement      Other       Woundvac     Amputation

1                         2                    2                  1                     0

2                         0                    2                  0                     1

1 ACCEPTED SOLUTION

Accepted Solutions
Astounding
PROC Star

One approach would get counts for each combination that exists in your data:

 

proc freq data=have;

tables StudyNum * Proc1 / noprint out=counts (keep=StudyNum Proc1 count);

run;

 

Then transform the data set of counts into a wider form:

 

proc transpose data=counts out=want;

by StudyNum;

var count;

id Proc1;

run;

 

Of course, this requires that any possible value for PROC1 is actually a valid name for a variable.  Also, it gives you missing values instead of zeros for combinations that didn't occur.  If you wanted to, you could go through the results later and change missing values to zero:

 

data want_final;

set want;

array nums {*} _numeric_;

do k=1 to dim(nums);

   if nums{k} = . then nums{k} = 0;

end;

run;

View solution in original post

1 REPLY 1
Astounding
PROC Star

One approach would get counts for each combination that exists in your data:

 

proc freq data=have;

tables StudyNum * Proc1 / noprint out=counts (keep=StudyNum Proc1 count);

run;

 

Then transform the data set of counts into a wider form:

 

proc transpose data=counts out=want;

by StudyNum;

var count;

id Proc1;

run;

 

Of course, this requires that any possible value for PROC1 is actually a valid name for a variable.  Also, it gives you missing values instead of zeros for combinations that didn't occur.  If you wanted to, you could go through the results later and change missing values to zero:

 

data want_final;

set want;

array nums {*} _numeric_;

do k=1 to dim(nums);

   if nums{k} = . then nums{k} = 0;

end;

run;

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 1 reply
  • 693 views
  • 0 likes
  • 2 in conversation