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

При компиляции шаблоны должны быть созданы экземплярами , прежде чем их компилировать в объектный код. Это создание может быть достигнуто только в том случае, если известны аргументы шаблона. Теперь представьте сценарий, в котором функция шаблона объявлена ​​в a.h, определенная в a.cpp и используемая в b.cpp. Когда компилируется a.cpp, не обязательно известно, что для предстоящей компиляции b.cpp потребуется экземпляр шаблона, не говоря уже о том, какой конкретный экземпляр это будет.

Можно утверждать, что компиляторы можно сделать умнее, чтобы «смотреть вперед» для всех применений шаблона, но я уверен, что это было бы нелегко создавать рекурсивные или другие сложные сценарии. AFAIK, компиляторы этого не делают. Как заметил Антон, некоторые компиляторы поддерживают явные декларации экспорта экземпляров шаблонов, но не все компиляторы поддерживают его (пока?).

0
задан S420L 13 July 2018 в 17:48
поделиться

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;

Per @Richards комментирует это также работ:

proc sql;
create table test2 as
select _&rat_as_nun from test;
quit;
1
ответ дан Reeza 17 August 2018 в 12:19
поделиться
  • 1
    Спасибо, отлично! – S420L 13 July 2018 в 18:05
  • 2
    Заметьте, почему вы не просто ходите с select _&rat_as_num. from test. Весь маршрут sysfunc(cats кажется вокруг. – Richard 13 July 2018 в 18:41
  • 3
    Да, это более простое решение! – Reeza 13 July 2018 в 18:46
Другие вопросы по тегам:

Похожие вопросы: