2016-12-06 2 views
0

У меня возникли проблемы с вычитанием даты из переменной макроса.Вычитание даты из макропеременной

В настоящее время я создаю макропеременную команды:

%LET date = %SYSFUNC(TODAY(),MMDDYY10.); 

Я чувствую, что я должен быть в состоянии вычесть 1 день от & даты, выполнив следующие действия:

%LET newDate = %SYSFUNC(%INTNX('day',&date,-1),date9.); 

Однако , это вызывает ошибку:

ОШИБКА: имя функции отсутствует в % SYSFUNC или% QSYSFUNC.

мне нужен выход для & newDate быть в date9.

Любая помощь будет оценена, спасибо!

ответ

2

Быстрый ответ:

%LET date = %SYSFUNC(TODAY()); 
%LET newDate = %SYSFUNC(INTNX(day,&date,-1),date9.); 
%put &=newdate; 

Объяснение:

Во-первых, лучше всего, чтобы удалить форматирование &date, чтобы убедиться, что он правильно интерпретированы как дата. Ваш исходный код разрешен (сегодня) внутри intnx() до 12/06/2016, который затем разрешен до 12, разделенных на 6, разделенных на 2016 год и т. Д.

Во-вторых, внутренняя функция %sysfunc() должна быть функцией передачи данных - целая точка %sysfunc() заключается в том, чтобы привести эти функции в sas. %intnx() не является макрофункцией, но если бы это было, то по определению вам не нужно было обертывать его в %sysfunc().

И, наконец, параметр «день» не следует указывать - все в макросе sas обрабатывается как текст по умолчанию.

+0

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

+0

@JoshuaSchlichting Я не вижу причин не делать этого в макроязыке, вообще говоря, вы просто не понимали его правильно - но если вы не понимаете макроязык, это хорошая причина поставить его на шаг данных для конечно! – Joe

0

@RawFocus, вы правы, что нет необходимости форматировать исходную дату (сегодняшнюю дату), и с этим легче справиться.

Просто для полноты картины, если кто-то хочет применить формат MMDDYY10., это то, как это может быть сделано:

%LET date = %SYSFUNC(TODAY(),mmddyy10.); 
%LET newDate = %SYSFUNC(INTNX(day,%SYSFUNC(INPUTN(&date,mmddyy10)),-1),date9.); 
%put &=date &=newdate; 
Смежные вопросы