Как использовать Date - отформатированный как YYYYMM под макросом в SAS - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть набор данных, где Period находится в формате YYYYMM, и я создал макрос для вызова этого макроса как:

data _null_;
date=today();
call symputx('month',put(intnx('month',date,-1,'e'),yymmn6.));
call symputx('period1',put(intnx('month',date,-1,'e'),date9.));

data _null_;
    call symputx('period1_fmt',put(input("&period1",date9.),yymmdd10.));

data _null_;
    call symput("yyyymm",   put(input("&period1", anydtdte9.), yymmn6.));
    call symput("period1",put(intnx('month',input("&period1",anydtdte9.),-1,'e'),yymmn6.));
run;

Теперь я хотел вызвать 201807, который хранится как & Period1 в другом макросе, например

%macro Checkdate(Date=);

    Proc sql;
        create table temp1_0 as
            select T1.MERC_ID,
                'CHURNED' as CATEGORY
            from RPT_Response_FC  as t1
                WHERE Period= &Date.
                    GROUP BY    T1.MERC_ID
        ;
    quit;

%mend;

%Checkdate(Date=&Period1);

Но ошибка отображается как

ОШИБКА: выражение, использующее равно (=), содержит компоненты разных типов данных.

Было бы здорово, если бы кто-нибудь мог помочь мне в этом. Как я мог решить эту ошибку.

Я преобразовал &Period1 в числовое значение, используя Sysfunc, но все равно он показывает ту же ошибку.

1 Ответ

0 голосов
/ 04 сентября 2018

Выражение, использующее equals (=), имеет компоненты разных типов данных. Это означает, что вы должны хранить вызов макропеременной в двойных кавычках. Как, WHERE Period= "&Date."

Код

%macro Checkdate(Date=);

    Proc sql;
        create table temp1_0 as
            select t1.MERC_ID,
                'CHURNED' as CATEGORY
            from RPT_Response_FC  as t1
            WHERE Period= "&Date."
            GROUP BY    T1.MERC_ID;
    quit;

%mend;

%Checkdate(Date=&Period1);
...