- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;