SAS разделил строку макроса разделителем

#sas #macros

#САС #sas-макрос

Вопрос:

Я хотел бы дать переменным собственные имена в макросе SAS, однако я либо получил сообщение об ошибке, либо получил первую букву строки. Вот пример использования следующих кодов SAS:

 data trial;   %let cate=gender age;  %let label="Gender*Age at dx";  do i=1 to countw("amp;cate");  item=scan("amp;cate",i) ;   print=scan(%str(amp;label),i,*);  output;  end; run;  

У меня такая ошибка:

ОШИБКА 386-185: Ожидание арифметического выражения. 25385 печать=сканирование(%str(amp;этикетка),i,*);

ОШИБКА 200-322: Символ не распознан и будет проигнорирован.

ОШИБКА 76-322: Синтаксическая ошибка, оператор будет проигнорирован.

Если я изменю коды вот так:

 data trial;  %let cate=gender age;  %let label="Gender*Age at dx";  do i=1 to countw("amp;cate");  item=scan("amp;cate",i) ;   print=scan(%str(amp;label),i);  output;  end; run;  

Я получаю print=Возраст вместо print=»Возраст в dx». Есть какие-нибудь намеки на это? Спасибо!

Ответ №1:

В функции отсутствуют кавычки вокруг вашего делиметра, * , scan() . Вам также не нужно использовать %str() .

 print=scan(amp;label, i, '*');  

Выход:

 i item print 1 gender Gender 2 age Age at dx  

Я бы также рекомендовал размещать ваши %let заявления перед этапом обработки данных, чтобы их было немного легче читать.

 %let cate=gender age; %let label="Gender*Age at dx";  data trial;   ...; run;  

Комментарии:

1. Да, добавление кавычек работает. Спасибо за ваше предложение!