我有一个数据集,其期间为 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
转换为数字,但是仍然显示相同的错误。
答案 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);