【问题标题】:SAS Error: A character operand was found in the %EVAL function or %IF condition where a numeric operand is requiredSAS 错误:在需要数字操作数的 %EVAL 函数或 %IF 条件中找到字符操作数
【发布时间】:2017-07-14 01:23:37
【问题描述】:

我有一个包含以下宏变量的宏:cat_var、模型、验证。

当我输入以下调用时,宏运行良好:

%models(cat_var=mommy dadmy,model=age readhr mommy dadmy,validate=no);

但是当我进入这个电话时:

%models(cat_var=mommy dadmy,model=age readhr mommy dadmy age*readhr,validate=no);

我收到此错误消息:

在 %EVAL 函数或 %IF 条件中找到字符操作数 其中需要数字操作数。条件是:(&validate =) 或 ((&cat_var =) 和 (&model =)) 或 ((&cat_var ^=) 和 (&model =))

因此,我相信我已将问题隔离到我编写的以下代码中:

%if (&validate =) or ((&cat_var =) and (&model =)) or ((&cat_var ^=) and (&model =)) %then 
%put ERROR: One or more inputs are missing. Check to make sure all macro variables have an input where necessary. (It is not necessary to have cat_var inputs);

我打算让这段代码使用的逻辑如下:

如果 validate 缺少输入或(cat_var AND 模型缺少输入)或(cat_var 不缺少输入且模型缺少输入),则显示错误消息。

在我在模型输入中输入 * 符号之前,此代码按预期工作。这是在搞砸吗?我该如何解决这个问题?

【问题讨论】:

  • if validate = or 不是任何语言的有效语法。
  • 是的。我意识到。它仍然不是有效的语法。 &validate 作为变量不会改变它。除非or&validate 可以比较的变量(显然不是),否则比较是无效的。在我见过的任何语言中,您都无法使用等号将变量与逻辑运算符进行比较。用文字说出来。假装&validate 是一只狗。 如果 Dog 等于或(Cat 或 Frog)。这对你有意义吗?
  • 就我的理解而言,SAS 认识到,如果等号的另一边没有参数,那么它正在评估等于 null(或缺失)的变量。如果我这样写它可能看起来更好:(&validate=) or。但是,我已经以两种方式运行代码并且它可以工作。唯一导致它吓坏的事情是当那个 * 符号被引入时。我所要求的可能是我评估缺失输入的另一种方式,因为显然在引入 * 时出现了问题

标签: if-statement macros sas eval


【解决方案1】:

因为%eval() 函数也可以计算整数算术,所以由于引入了算术运算符,所以会出现错误。

如果您想测试宏变量是否为空或空白,请查看此问题。 Testing for an empty parameter in a SAS Macro

【讨论】:

  • 感谢您指导我回答这个问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多