SAS宏条件等于返回错误

时间:2017-05-11 15:43:00

标签: sas sas-macro

我有两个数字变量,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;

我收到错误消息:“在表达式中找不到必需的运算符”

我使用了错误的操作员吗?

由于

2 个答案:

答案 0 :(得分:1)

如果这些是定义的宏变量,那么这应该在您发布它时起作用。我建议做一个修改;您应该将date1date2作为参数传递,即使它们只是按原样传递,因为封装原则。但是你发布的内容只会基于全局宏变量。

%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在解决宏方面的重要性,以便更好地理解。