如何使用日期-在SAS中的宏下格式为YYYYMM

时间:2018-09-03 05:43:02

标签: sas

我有一个数据集,其期间为 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);

但是显示为

  

错误:使用等号(=)的表达式具有不同数据类型的组件。

如果有人能在这方面帮助我,那将是很棒的。我该如何解决该错误。

我使用&Period1Sysfunc转换为数字,但是仍然显示相同的错误。

1 个答案:

答案 0 :(得分:0)

使用等号(=)的表达式具有不同数据类型的组件。这意味着,必须将宏变量调用保留在双引号内。就像 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);