Hi Caroline, try the code below: data have; input ID QUEST :$8. ANS $6.; cards; 123 CKD001CA Boy 123 CKD004DB Red 123 CKD020CA Farm 124 CKD005DB Girl 124 CKD001CA City 125 CKD021CA Blue 126 CKD005DB Boy 126 CKD021CA Yellow 126 CKD005DB City ; data want(keep=id ckd:); set have; by id; array _q(*)$ ckd1-ckd21; retain ckd:; i=input(compress(quest,,'kd'),3.); _q(i)=ans; if last.id then do;output; call missing(of ckd:);end;run; proc print;run; c c c c c c c c c c c c c c c c c c c c c k k k k k k k k k k k k O k k k k k k k k k d d d d d d d d d d d d b I d d d d d d d d d 1 1 1 1 1 1 1 1 1 1 2 2 s D 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1 123 Boy Red Farm 2 124 City Girl 3 125 Blue 4 126 City Yellow Linlin
... View more