Использование макропеременных в аргументах шага данных

Я пытаюсь написать крошечную программу с параметрами для резервного копирования наборов данных (имя + дата + время) в Enterprise Guide. Вот код:

data &WhatLib..&WhatTable%str(_)&SYSDATE.%sysfunc(tranwrd(%str(&SYSTIME.),:,_)) ;
set &WhatLib..&WhatTable ;
run;

WhatLib (значение по умолчанию работает) и WhatTable (значение по умолчанию _PRODSAVAIL) - параметры. Что ж, я получаю результат, который на скриншоте:

первая версия кода результата

Я добавил еще несколько строк для проверки значений макропеременных:

%put &WhatLib..&WhatTable%str(_)&SYSDATE.%sysfunc(tranwrd(%str(&SYSTIME.),:,_));
%put &WhatLib..&WhatTable;

И результат в журнале был:

work._PRODSAVAIL_22AUG1613_28

work._PRODSAVAIL

Затем я заключил этот код в определение макроса:

%macro TEST();
...
<--same code-->
...
%mend TEST;

%TEST();

Но результат был тот же. Буду признателен, если вы укажете ошибку или функцию, которую я не реализовал.


person Sanek Zhitnik    schedule 22.08.2016    source источник


Ответы (1)


%STR(_) вызывает здесь проблему. Вам не нужно указывать _ в функции макроса %STR(). Подчеркивание - это правильная часть имени в наборах данных.

Также лучше использовать %SYSFUNC() с функциями TIME() и DATE(), чтобы иметь актуальные время и дату. Не время и дата начала SAS:

data &WhatLib..&WhatTable._%sysfunc(date(),date9.)_%sysfunc(tranwrd(%sysfunc(time(),hhmm5.),:,_));
   set &WhatLib..&WhatTable;
run;
person fl0r3k    schedule 22.08.2016