Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement SAS错误:在需要数字操作数的%EVAL函数或%IF条件中发现字符操作数_If Statement_Macros_Sas_Eval - Fatal编程技术网

If statement SAS错误:在需要数字操作数的%EVAL函数或%IF条件中发现字符操作数

If statement SAS错误:在需要数字操作数的%EVAL函数或%IF条件中发现字符操作数,if-statement,macros,sas,eval,If Statement,Macros,Sas,Eval,我有一个包含以下宏变量的宏: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条件中找到字符

我有一个包含以下宏变量的宏: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);
我打算让这段代码使用的逻辑如下:

如果验证缺少输入或(cat_var和模型缺少输入)或(cat_var没有缺少输入,模型缺少输入),则显示错误消息

在我在模型输入中输入*符号之前,该代码一直按照我的预期工作。这就是搞砸它的原因吗?我怎样才能解决这个问题

因为
%eval()
函数也可以计算整数算术,所以由于引入算术运算符,您会得到错误

如果要测试宏变量是空的还是空的,请查看此问题。
如果validate=或
在任何语言中都不是有效语法。是。我知道。它仍然不是有效的语法。作为变量,
&validate
不会改变它。除非
是一个可以与
&validate
进行比较的变量(显然不是),否则比较是无效的。在我见过的任何语言中,都不能用等号将变量与逻辑运算符进行比较。用语言说出来。假装
&validate
是一只狗。如果狗等于或(猫或青蛙)。这对你有意义吗?据我所知,SAS认识到,如果等号的另一侧没有参数,那么它正在计算等于null(或缺失)的变量。如果我这样写的话可能会更好:
(&validate=)或
。然而,我已经以两种方式运行了代码,它可以正常工作。唯一让它抓狂的是当*符号被引入时。我所要求的可能是另一种评估缺失输入的方法,因为在介绍时,显然有些东西出了问题。谢谢你指导我找到答案!