Hello- this is my first post in this community and hoping for some help, if I need to adjust anything about my style of posting, please let me know and I will adjust!
I am working with a healthcare dataset that involves many variables (some char, some numeric) that represent checkboxes in a database.
For example, one would tick off all the applicable options to capture what outcome a patient may have ( 1 being Admitted, 2 being Discharged, etc.).
I am trying to produce simple frequency counts for each option ( 406 patients were Admitted, 189 patients were Discharged etc. ) and have made formats to convert each number into the corresponding character string.
However, observations that have more than one option chosen don't apply the format (if a patient was Transferred then Discharged, and both options were chosen, outputs as '2,5' not 'Transferred,Discharged'). I was thinking of using PRXMATCH to pick up instances of each number and creating secondary accumulating variables for each option, but am not sure thats most efficient . I've attached screenshots of the resulting frequency tables, and copy & pasted my code. Any guidance would be appreciated!
/***************************************************/
proc format;
value $status 1='Admitted' 2='Discharged'
3='Transferred' 4='Left AMA' 5='Expired'
6='Unknown' 7='Eloped';
run;
proc freq data=nonfatal.final;
format status_ednf_nnf1 $status.;
tables status_ednf_nnf1;
run;
/*******************************/
You need to convert them before you concatenate them.
Unfortunately there isn't a concatenation operator which handles this, so you need to loop through via an array.
By using tranwrd function, we can get the results in desired way. Please follow below code.
data sam;
length x $10;
x="1";output;
x="2,3";output;
x="1,3";output;
x="2";output;
x="1,2,3";output;
x="1,3";output;
x="2,3";output;
x="3";output;
;
run;
data fin;
length word $100;
set sam;
word=x;
word=tranwrd(word,"1","Admitted");
word=tranwrd(word,"2","Treated");
word=tranwrd(word,"3","Discharged");
run;
Used the first part of your data to demo the process I would take to label the checkbox values
data have;
length chks $ 10;
input chks $;
datalines;
1,2
1
1,2,3
1,2,4
1,3
1,4
1,4,3
1,5
2
2,3
2,4
2,5
2,6
;
proc format;
value $status 1='Admitted' 2='Discharged'
3='Transferred' 4='Left AMA'
5='Expired' 6='Unknown' 7='Eloped';
run;
data want;
set have;
length parse $12 status_ednf_nnf1 $500;
do i=1 by 1 until (parse='');
parse=put(scan(chks, i, ','),$status.);
if i=1 then
status_ednf_nnf1=parse;
else
status_ednf_nnf1=catx(',', status_ednf_nnf1, parse);
end;
keep chks status_ednf_nnf1 ;
run;
proc print;
run;
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.