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;
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.