PROC TRANSPOSE will work. You might need to run it twice however.
proc transpose data=have out=tall;
by id event;
var q1-q24;
run;
proc transpose data=tall out=want(drop=_name_);
by id;
id event _name_;
var col1;
run;
Or you could leave the data as it is and just PRINT it that way using PROC REPORT.
proc report data=have;
column id event,(q1-q4);
define id / group;
define event / across;
run;
I'd go one step further and make your initial dataset longer:
proc transpose data=have out=long name=quarter;
by record_id event notsorted;
var q:;
run;
proc report data=long;
column record_id event,quarter,col1;
define record_id / group;
define event / "" across;
define quarter / "" across;
define col1 / "" analysis;
run;
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.