I have two thoughts on this topic.
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.
data test;
a=1;b=45; output;
a=2;b=27; output;
a=3;b=99; output;
run;
proc transpose data=test out=new prefix=Scale;
id a;
var b;
run;
proc print data=new; run;
Hope this helps.