Hi everyone,
I need some guidance on the following:
My dataset contains 45 observations and 4 variables: cough, fever, sweats, flu; each variable is numerical with choices 1=<2 months, 2=3-4 months, 3=5-6 months, 4=>6 months, 9=unknown.
I need to create a new variable called 'anysymptom' where it would give me the longest duration for any of these symptoms (e.g. for observation 1 that has cough=1 fever=2 sweats=4 flu=9, the new variable would return 4, which is >6 months).
There are also missing values for some of the observations.
Is there a function I could utilize for this?
Any advise is appreciated!
Thanks!
Like this?
LONGEST=max(FLUE*(FLUE<9), COUGH*(COUGH<9), SWEAT*(SWEAT<9), FEVER*(FEVER<9));
anysymptom = max(ifn(cough eq 9, ., cough),
ifn(fever eq 9, ., fever),
ifn(sweats eq 9, ., sweats),
ifn(flu eq 9, ., flu));
If there were a lot of variables you could use an array and a loop.
If the 9 wasn't there this would be much easier, there's the LARGEST/MAX functions. This probably could be tweaked but I suspect @WarrenKuhfeld is probably the easiest or some form of a basic loop where you can ignore the 9.
In this solution, I use the LARGEST() function and loop if it's a 9 so you're not looping through all the variables, only until you find one the largest that's not a 9.
data test;
a=1;
b=2;
c=3;
d=9;
output;
a=2;
b=3;
c=3;
d=4;
output;
a=9;
b=9;
c=9;
d=9;
output;
run;
data want;
set test;
array vars(*) a b c d;
maxv=.; i=1;
do until (maxv ne 9 or i=dim(vars));
maxV=largest(i, of vars(*));
i+1;
end;
if maxV=9 then maxV=.;
run;
proc print data=want;
run;
Here is one way:
proc format; value symptom 9=0 ; run; data want (drop=i);
set have;
array symptoms(*) cough--flu;
do i=1 to dim(symptoms);
symptoms(i)=put(symptoms(i),symptom.);
end;
anysymptom=max(of symptoms(*));
run;
Art, CEO, AnalystFinder.com
Like this?
LONGEST=max(FLUE*(FLUE<9), COUGH*(COUGH<9), SWEAT*(SWEAT<9), FEVER*(FEVER<9));
Thank you all for the wonderful advice!
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.
Ready to level-up your skills? Choose your own adventure.