1) In the first solution, I'm surprised that call symput worked. I thought that variable assignment could not be used in the data set in which it was assigned. When I try the code myself, I get an error.
2) It sounds like you want to take a list of data and transpose it into a set of columns with the column name defined, in part, by a variable. To do this, I would suggest looking at the prefix option of PROC TRANSPOSE.
proc transpose data=test out=new prefix=Scale;