I have data that has a character field with many vial numbers per patient. I want to split it out into an individual observation per subject for each vial.
For example, my data might look like this:
data subjects;
length subject $3 vials $33;
input subject $ vials $;
cards;
S01 10509,10511,10512
S02 09631,09636,09639,09640,09641
S03 11978,12059
;
run;
I want to get it into this form:
Subject | Vial |
---|---|
S01 | 10509 |
S01 | 10511 |
S01 | 10512 |
S02 | 09631 |
S02 | 09636 |
S02 | 09639 |
S02 | 09340 |
S02 | 09641 |
S03 | 11978 |
S03 | 12059 |
I would do this as
data want(drop=i vials);
set subjects;
i=1;
do while (scan(vials,i) ne "");
vial=scan(vials,i);
output;
i+1;
end;
run;
proc print data=want;
run;
I would do this as
data want(drop=i vials);
set subjects;
i=1;
do while (scan(vials,i) ne "");
vial=scan(vials,i);
output;
i+1;
end;
run;
proc print data=want;
run;
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.