我有两个数字变量,date1和date2,它们当前都设置为20170502.
在我的宏中,如果两个变量相等,我想发送一封电子邮件。这是我的代码:
%let date1 = input(put(intnx('day', today(),-3),yymmddn8.),8.);
%macro EMAIL;
filename INSRNC email;
data _null_;
%if &date1. = &date2. %then %do;
file INSRNC to="email@address"
subject= "test";
put "email message";
%end;
run;
%mend;
%EMAIL;
我收到错误消息:“在表达式中找不到必需的运算符”
我使用了错误的操作员吗?
由于
答案 0 :(得分:1)
如果这些是定义的宏变量,那么这应该在您发布它时起作用。我建议做一个修改;您应该将date1
和date2
作为参数传递,即使它们只是按原样传递,因为封装原则。但是你发布的内容只会基于全局宏变量。
%let date1=20140101;
%let date2=20140101;
%macro EMAIL(date1=, date2=);
filename INSRNC email;
data _null_;
%if &date1. = &date2. %then %do;
*file INSRNC to="email@address"
subject= "test";
put "email message";
%end;
run;
%mend;
%EMAIL(date1=&date1., date2=&date2.);
如果您获得required operator not found in expression
,那么您的宏变量未正确定义,并且可能在其中包含一个字符,导致无法正确读取。使用OPTIONS MPRINT SYMBOLGEN;
查看原因。
答案 1 :(得分:1)
@Joe给出了如何定义宏的完美解释。将宏作为参数传递使得它变得非常容易。但是,请查看有关date1
如何解决的评论,请参阅下面的
date1 = %sysfunc(input(put(intnx('day', today(),-3),yymmddn8.),8.));
请仔细阅读%Sysfunc在解决宏方面的重要性,以便更好地理解。