SAS Как перебрать дату в макросе? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть такой макрос:

%macro loop(report_date);
    /* some sql-code with where-statement on report_date:
         create table with name small_table */
%mend;

Затем я хочу написать код, который создает таблицу: эта таблица представляет собой объединение таблиц, в которых выполняется условие для переменной report_day. Но мой код не работает:

%let days_number = 31;
%let Min_Date = '01Jan2018:00:00:00'dt;
/* create table with name big_table */



/*this macro creates a union table */
%macro doInLoop(report_date);
    %loop(&report_date.);

    PROC SQL;
        CREATE TABLE Big_table AS
        SELECT *
        FROM big_table
        UNION ALL
        SELECT *
        FROM small_table;
    QUIT;

%mend;

%macro createTable;

    %local j;
    %do j = 1 to &days_number.;
        %let rep_date = dhms(datepart(&Min_Date.) + j, 0, 0, 0); 

        %if day(rep_date) = 1 %then %doInLoop(%rep_date);
    %end;

%mend;

%createTable;

У меня 31 ошибка с сообщениями: «ОШИБКА: в участвующих таблицах не найдено следующих столбцов: j»

Или как мне создать макрос, который использует рабочий макрос на один день («цикл»), для определенных дней из диапазона?

Спасибо.

1 Ответ

0 голосов
/ 30 августа 2018
  • Используйте INTNX () для увеличения даты, не делайте это вручную.
  • Вы не можете использовать функции в операторе% LET без% SYSFUNC (), иначе Макропроцессор не может определить, что такое текст и что такое функция.
  • К сожалению, у вас также есть больше проблем, чем просто ваша дата, поэтому я буду покажу, как это сделать, а остальное оставлю вам.

    %let rep_date = %sysfunc(intnx(DTDAY, &min_date, 1, 's');
    

DTDAY указывает дневной интервал для переменной datetime. Если бы у вас была переменная даты, интервал был бы ДЕНЬ.

Не забудьте ссылаться на rep_date с амперсандом и & rep_date, в противном случае это просто текст для SAS.

Вы можете найти полезные макросы в приложении к макросам. Один иллюстрирует цикл с датами. https://documentation.sas.com/?docsetId=mcrolref&docsetTarget=n01vuhy8h909xgn16p0x6rddpoj9.htm&docsetVersion=9.4&locale=en

...