我正在执行哪些操作来生成 SAS 错误:"Required operator not found in expression"?



下面的代码生成了上面的错误。我在找一个解释。请帮助。

%GLOBAL var;
%LET var = 1;
%MACRO test;
%IF &var. in (1,2) %THEN %DO;
%PUT &var.;
%END;
%MEND;
%test;
ERROR: Required operator not found in expression: &var. in (1,2)

使用"In"在%IF中需要更改为以下代码。或者使用%index函数

%GLOBAL var;
%LET var = 1;
%MACRO test;
%IF **&var.=1 or &var.=2** %THEN %DO;
%PUT &var.;
%END;
%if %index
%MEND test;
%test;

如果您希望宏处理器将IN(或#)视为操作符(而不是SAS编码的前25年的纯文本),您必须告诉SAS这样做。如宏语言手册中的操作符表所示:https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/mcrolref/n1alyfc9f4qrten10sd5qz5e1w5q.htm

有系统选项可以做到这一点,MINOPERATOR和MINDELIMITER。

但是对于宏来说,最好的方法是在定义宏的% macro语句上。这样,即使宏的调用者以其他方式设置了系统选项,宏也可以工作。

%macro test / minoperator mindelimiter=',';
%if &var. in (1,2) %then %do;
%put &=var is in (1,2);
%end;
%mend;
%let var = 1;
%test;

结果:

93   %let var = 1;
94   %test;
VAR=1 is in (1,2)

为了在宏函数中使用In操作符,您必须使用

options minoperator on;

如果SAS记录了任何地方或错误告诉您这是您所需要的,那么肯定会有所帮助。我们花了半天的时间调试有问题的代码。

相关内容

最新更新