proc transpose will accept these names without any changes if you set options validvarname=any;
If you want to work with columns afterwards, you can use the NLITERAL function to create name literals that can be used to reference them:
options validvarname=any; data zz; var1 = "Rob Penridge"; var2 = 5; output; var1 = "$*@' Blah@ *"; var2 = 100; output; run; proc transpose data = zz out = zz_t; id var1; run; data _null_; set zz; call symput(cats("name", _n_), nliteral(var1)); run; data blah; set zz_t; &name1. = &name1. + 5; &name2. = &name2. + 200; run;
source share