CATS возвращает строку, а не имя переменной. Таким образом, имя переменной не имеет значения, вы получите строку с _RAT_AS_NUM_VALUE.
Чтобы вернуть имя переменной, используйте% SYSFUNC () вместо этого,
data test;
_9 = 4;
run;
%let rat_as_num=9;
proc sql;
create table test2 as
select %sysfunc(cats(_, &rat_as_num)) from test;
quit;
proc print data=test2;
run;
Per @Richards комментирует это также работ:
proc sql;
create table test2 as
select _&rat_as_nun from test;
quit;