Как ссылаться на переменную SAS с помощью CATS в PROC SQL?

Очень простая вещь, которую я не могу понять. Столбцы в конкретной таблице - это числа с подчеркиванием перед ними, у меня есть номер, хранящийся в макропеременной, а имя столбца, которое я хочу использовать, - это номер с подчеркиванием. Скажем, число 9, когда я пишу следующий код, я получаю столбец, в котором каждое наблюдение _9, а не столбец _9 из этого набора данных.

    proc sql;
    create table TM1 as
        select cats("_",&rat_as_num) from default_data;
    quit;

person S420L    schedule 13.07.2018    source источник
comment
Что именно разрешает & rat_as_num? Пожалуйста, разместите вывод: %put &rat_as_num.;.   -  person Reeza    schedule 13.07.2018


Ответы (1)


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;

Согласно комментариям @Richards, это также работает:

proc sql;
create table test2 as
select _&rat_as_nun from test;
quit;
person Reeza    schedule 13.07.2018
comment
Обратите внимание, почему вы просто не идете с select _&rat_as_num. from test. Весь sysfunc(cats маршрут кажется круглым. - person Richard; 13.07.2018
comment
Ага, это намного более простое решение! - person Reeza; 13.07.2018