BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
Sam1010
Fluorite | Level 6

I have a data set below:

Patient ID

Drug 1

Drug 2

Drug 3

Drug 4

Drug 5

Drug 6

Drug 7

1

Statin

Statin

BB

 

ACEI

 

Statin

2

 

BB

 

BB

BB

 

 

3

Statin

 

BB

 

 

BB

 

4

ACEI

Statin

 

ACEI

 

 

ACEI

5

 

ACEI

BB

 

 

 

 

6

Statin

 

 

Statin

 

Statin

 

7

BB

 

 

 

 

 

 

 How do I create another variable (Total med) where:

 

If Statin and BB and ACEI are in at least one of the 7 columns, then Total Med = Triple

If ONLY Statin and BB are in at least one of 7 columns, then Total Med = Double_SB

If ONLY Statin and ACEI are in at least one of 7 columns, then Total Med = Double_SA

If ONLY Statin appeared in at least one of 7 columns, then Total Med = Statin alone

If ONLY BB appeared in at least one of 7 columns, then Total Med = BB alone

If ONLY ACEI appeared in at least one of 7 columns, then Total Med = ACEI alone

1 ACCEPTED SOLUTION

Accepted Solutions
PaigeMiller
Diamond | Level 26

Something like this in a data step

 

data want;
    set have;
    length totalmed $ 15;
    /* If Statin and BB and ACEI are in at least one of the 7 columns, then Total Med = Triple */
    if whichc('Statin',of drug:)>0 and whichc('BB',of drug:)>0 and whichc('ACEI',of drug:)>0 then totalmed='Triple';
    /* If ONLY Statin and BB are in at least one of 7 columns, then Total Med = Double_SB */
    if whichc('Statin',of drug:)>0 and whichc('BB',of drug:)>0 and whichc('ACEI',of drug:)=0 then totalmed='Double_SB';
    /* You type the rest */
run;
    
--
Paige Miller

View solution in original post

3 REPLIES 3
PaigeMiller
Diamond | Level 26

Something like this in a data step

 

data want;
    set have;
    length totalmed $ 15;
    /* If Statin and BB and ACEI are in at least one of the 7 columns, then Total Med = Triple */
    if whichc('Statin',of drug:)>0 and whichc('BB',of drug:)>0 and whichc('ACEI',of drug:)>0 then totalmed='Triple';
    /* If ONLY Statin and BB are in at least one of 7 columns, then Total Med = Double_SB */
    if whichc('Statin',of drug:)>0 and whichc('BB',of drug:)>0 and whichc('ACEI',of drug:)=0 then totalmed='Double_SB';
    /* You type the rest */
run;
    
--
Paige Miller
FreelanceReinh
Jade | Level 19

Hello @Sam1010 and welcome to the SAS Support Communities!

 

So, basically, each of the possible combinations of the three drug classes corresponds to one value of the new variable. Then I would also define the cases "none of the three" and "only ACEI and BB" (the latter occurs for patient no. 5; how about denoting this combination as "Double_AB"?) and use the CHOOSEC function:

data have;
input Patient_ID (Drug1-Drug7) ($);
cards;
1 Statin Statin BB . ACEI . Statin
2 . BB . BB BB . . 
3 Statin . BB . . BB . 
4 ACEI Statin . ACEI . . ACEI 
5 . ACEI BB . . . . 
6 Statin . . Statin . Statin . 
7 BB . . . . . .
;

data want;
set have;
array d[*] drug:;
length Total_Med $12;
Total_Med=choosec(1 + ('ACEI' in d) + 2*('BB' in d) + 4*('Statin' in d),
                  ' ','ACEI alone','BB alone','Double_AB???','Statin alone','Double_SA','Double_SB','Triple');
run;

The first argument of the CHOOSEC function is a number in {1, 2, ..., 8} and uniquely determines the combination (remember the binary number system). The subsequent strings describe these combinations.

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

Mastering the WHERE Clause in PROC SQL

SAS' Charu Shankar shares her PROC SQL expertise by showing you how to master the WHERE clause using real winter weather data.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 3 replies
  • 603 views
  • 3 likes
  • 3 in conversation