Voila qui devrait t'aider:
proc contents data=work.table_a_trier out=work._temp(keep=name );
run;
proc sort data=work._temp;
by name;
run;
data _null_;
set work._temp end=eof;
call symput('var'||trim(left(put(_n_,best.))),name);
if eof then call symput('totvar',trim(left(put(_n_,best.))));
run;
%macro reorder;
data work.table1;
format %do i = 1 %to &totvar; &&var&i /*&&for&i*/ %end;;
set work.table;
run;
%mend reorder;
%reorder;
n'hésite pas à demander si cela ne fonctionne toujours pas