Модификатор двоеточия в макросе

Я пытаюсь использовать функциональность модификатора двоеточия в макросе, но, похоже, он не работает так же, как в шаге данных. Пример того, что я пытаюсь сделать, показан ниже.

data _null_;
str = "hello";
if str =: "h" then put "y";
else put "n";
run;

if-statement оценивает TRUE на шаге данных, но когда я применяю аналогичную логику на языке макросов, это больше не работает.

%let str = hello;
%put %eval(&str =: h);

Приведенный выше код теперь оценивается как FALSE. Я что-то здесь упускаю или этот модификатор просто недоступен в макроязыке? Я знаю, что мог бы использовать %eval(%substr(&str,1,1)=h), но мне больше интересно узнать, будет ли работать :.


person J_Lard    schedule 19.05.2017    source источник


Ответы (1)


Нет, : нет в списке макрооператоров; см. справочник по языку макросов. подробнее.

Обратите внимание, что =: также недействителен в других местах, например, в PROC SQL. В этих контекстах eqt является эквивалентным оператором, но он также не работает в макроязыке.

person Joe    schedule 19.05.2017
comment
Спасибо за понимание. Я не уверен, связано ли это с версией SAS, но я могу использовать =: в операторе WHERE. Пример: proc print data=sashelp.class; where name=:'Al';. - person J_Lard; 22.05.2017
comment
@J_Lard Хм, думаю, я ошибаюсь - исправлено. Спасибо. - person Joe; 22.05.2017