宏错误:在 %IF 条件中找到字符操作数

macro error: A character operand was found in %IF condition

提问人:Aura 提问时间:11/11/2023 更新时间:11/11/2023 访问量:39

问:

我得到“在需要数字操作数的 %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("&center."),20.);
run;
%end;

%MEND system;

我不知道问题从何而来

错误处理 语法 SAS SAS-宏

评论

0赞 Stu Sztukowski 11/11/2023
你有没有给&没有价值?%system(4, foo);
0赞 Aura 11/11/2023
是的,当使用宏时,我给了它 4 值,但我得到了一个空白输出,所以我进入内部,发现当我从 %if --- %end 运行行时会弹出此错误;在宏内部
0赞 Stu Sztukowski 11/11/2023
您正在尝试在开放代码中运行?%if ... %end
0赞 Stu Sztukowski 11/11/2023
宏中也存在错误。 应该是data system_%no.;data system_&no.;
0赞 Richard 11/11/2023
您可以通过在宏调用之前添加到代码来观察宏处理和代码生成。还有几个与宏相关的选项,您可以在帮助系统中找到它们。options mprint symbolgen mtrace;

答:

1赞 Quentin 11/11/2023 #1

您的代码中有拼写错误,而不是 .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)

在这种情况下,您可以使用宏引用来避免该问题,但从您的描述来看,我怀疑这种情况是否发生在您的案例中。

测试宏时,不要只突出显示和提交部分宏定义。您需要提交整个宏定义才能对其进行编译,然后提交宏调用以调用它。

请务必查看整个日志,包括编译宏的步骤和宏执行,以确保没有错误消息。