DATA Step, Macro, Functions and more

Conditional processing with many conditions (if then else, or an array)

Accepted Solution Solved
Reply
Frequent Contributor
Posts: 104
Accepted Solution

Conditional processing with many conditions (if then else, or an array)

Hi All,

 

I need help with some code using either if, then, else, or an array.

 

I have a data set with many medication fields (wide data set). They are labeled medication1-medication29. I want to create a new variable called "code" that is equal to 1, if any of the 29 medications = 258. Then if medications =225 or 265 then code =2.

 

Here is some sample code I was playing with:

if (medication1 or medication2 or medication3 or medication4 or medication5...medication29)=258 then code=1;

else if (medication1 or medication2 or medication3 or medication4 or medication5...medication29)=225 or (medication1 or medication2 or medication3 or medication4 or medication5...medication29)=265 then code=2;

...

 

Thanks!

Sarah

 


Accepted Solutions
Solution
‎11-24-2015 09:29 AM
Super User
Posts: 17,784

Re: Conditional processing with many conditions (if then else, or an array)

[ Edited ]

Look up the WHICHN or WHICHC functions depending on if your variable is character or numeric.

Assuming Numeric:

array med(29) medication1-medication29;

if whichn(258, of med(*))>0 then code=1;
else if (whichn(225, of med(*))>0 OR whichn(265, of med(*))>0) then code=2;

View solution in original post


All Replies
Solution
‎11-24-2015 09:29 AM
Super User
Posts: 17,784

Re: Conditional processing with many conditions (if then else, or an array)

[ Edited ]

Look up the WHICHN or WHICHC functions depending on if your variable is character or numeric.

Assuming Numeric:

array med(29) medication1-medication29;

if whichn(258, of med(*))>0 then code=1;
else if (whichn(225, of med(*))>0 OR whichn(265, of med(*))>0) then code=2;
Super User
Super User
Posts: 7,392

Re: Conditional processing with many conditions (if then else, or an array)

Just to add, with a do loop over your codes, you don't need all the conditional code either:

data have;
  infile datalines;
  input medication1-medication5;
datalines;
258 34 45 12 67
56 78 45 23 12
78 76 75 225 5
;
run;

data want;
  set have;
  array med{5} medication1-medication5;
  c=1;
  do i=258,225,657,234,123,897,445;
    if whichn(i,of med(*))>0 then code=c;
    c=c+1;
  end;
run;
☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 244 views
  • 3 likes
  • 3 in conversation