我有一个包含以下宏变量的宏:cat_var,model,validate。
当我输入以下调用时,宏运行良好:
%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);
我打算使用此代码的逻辑如下:
如果缺少输入OR(cat_var AND模型缺少输入)或(cat_var不缺少输入AND模型缺少输入)则显示错误消息。
此代码按照我的预期工作,直到我在模型输入中输入*符号。这是什么搞砸了?我该如何解决这个问题?
答案 0 :(得分:1)
因为%eval()
函数也可以计算整数运算,所以你会因为引入算术运算符而得到错误。
如果要测试宏变量是空还是空白,请参阅此问题。 Testing for an empty parameter in a SAS Macro