Как установить даты отчета автоматически для аргументов% str - PullRequest
0 голосов
/ 08 ноября 2019

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

Текущий формат, который работает и выполняется:

/* Set report dates (dd-mm-yyyy) */
%let fore_start = %str(08-SEP-2019);
%let fore_end = %str(03-JAN-2020);

Я пытаюсь создать что-то вроде:

/* Set report dates (dd-mm-yyyy) */
%let fore_start = %str(TODAY()-61);
%let fore_end = %str(TODAY()+56);

Я ищу помощь в разработке синтаксически обоснованной линии для решения этой проблемы. Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Представления даты, которые вы показываете как хранящиеся в макропеременных fore_start и fore_end, фактически dd-mmm-yyyy, или формат DATE11.

Функция %sysfunc marco вызовет функцию шага DATAи при желании отформатировать результат. Функция INTNX выполняет арифметику даты.

%let fore_start = %sysfunc(intnx(DAY, %sysfunc(today()), -61), DATE11);
%let fore_end   = %sysfunc(intnx(DAY, %sysfunc(today()), +56), DATE11);
0 голосов
/ 08 ноября 2019

Попробуйте:

%let fore_start = %sysfunc(putn(%eval(%sysfunc( today() ) - 61), ddmmyyd10.) );
%let fore_end = %sysfunc(putn(%eval(%sysfunc( today() ) + 56), ddmmyyd10.) );

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

fore_start = put(today() - 61, ddmmyyd10.);
fore_end   = put(today() + 56, ddmmyyd10.);

Есть несколько вещей:

  1. На макроязыке такие функции SAS, как putn и today(), должны быть оба заключены в %sysfunc(). %sysfunc() - это ваше подключение к системным функциям SAS и средству макросов.

  2. %eval вычитает два целых числа друг от друга.

  3. putn, другая функция SAS, преобразует полученную дату SAS в желаемый формат ddmmyyd10.. putn требуется для макроязыка вместо put.

...