我收到“在需要数字操作数的 %EVAL 函数或 %IF 条件中找到字符操作数。条件是: &不。 = 4" 以下代码出现错误:
%MACRO system(no, center);
%if &no. = 4 %then do%;
data system_%no.;
set system1 system2 (rename=(sysid=systemid));
if systemid > (&no. * 4) then delete;
if systemid < ((&no. * 4) -3) then delete;
sysid=systemid+30;
drop systemid;
system = &no.;
center = put(strip("¢er."),20.);
run;
%end;
%MEND system;
我不知道问题出在哪里
do%
而不是
%do
。请给出产生此问题的宏定义和宏调用的示例。这是宏的简化版本,它不会通过这些调用产生错误消息:
%MACRO system(no, center);
%if &no. = 4 %then %do;
%put I ran &=no;
%end;
%MEND system;
%system(,foo)
%system(3,foo)
%system(4,foo)
%system(5,foo)
可以通过如下调用产生错误消息:
%system(OR,foo)
在这种情况下,您可以使用宏引用来避免问题,但根据您的描述,我怀疑您的情况是否发生了这种情况。测试宏时,不要只突出显示并提交部分宏定义。您需要提交整个宏定义才能编译它,然后提交宏调用来调用它。
请务必检查整个日志,包括编译宏的步骤和宏执行的步骤,以确保没有错误消息。