If statement 如果条件和宏程序中的proc sql

If statement 如果条件和宏程序中的proc sql,if-statement,sas,data-analysis,sas-macro,proc-sql,If Statement,Sas,Data Analysis,Sas Macro,Proc Sql,我有一个控件要验证。 我想写一个宏变量,其中包含一个SQL proc,以防条件被验证。 例如: 如果我们对control3执行相同的过程,则proc sql不会运行,因为control3不属于列表 我可能在语法上有一些错误 /*CONTROL1和PRODUIT已经声明*/您的主要问题是需要让SAS知道您想在中使用作为宏逻辑中的运算符 要启用中的作为宏语言中的运算符,则需要设置MINOPERATOR选项。若要确保它始终适用于宏,而与系统选项的设置方式无关,请将其添加到%macro语句中 %macr

我有一个控件要验证。
我想写一个宏变量,其中包含一个SQL proc,以防条件被验证。
例如:

如果我们对control3执行相同的过程,则proc sql不会运行,因为control3不属于列表

我可能在语法上有一些错误


/*CONTROL1和PRODUIT已经声明*/

您的主要问题是需要让SAS知道您想在中使用
作为宏逻辑中的运算符

要启用
中的
作为宏语言中的运算符,则需要设置
MINOPERATOR
选项。若要确保它始终适用于宏,而与系统选项的设置方式无关,请将其添加到
%macro
语句中

%macro Control1(List) / minoperator mindelimiter=' ';
但你也有一些其他问题

为宏定义参数时,只需键入希望参数具有的名称。您的示例在名称前有一个
&
,这将是无效的语法,用于引用宏变量的值,您不能使用“值到宏变量”来命名参数。因此,在定义宏时,只需列出名称

%macro control1(list) .....
请注意,调用宏时,在将参数值传递给宏时引用宏变量是可以的,就像您在示例调用中所做的那样

%if
语句有多个问题。第一个似乎只是输入错误,在
列表
宏变量名称的末尾添加了一个额外的
e
。第二个是逻辑错误。宏变量
CONTROL1
的值永远不会与带有双引号字符的值相同。此外,不需要在
运算符中的
值列表周围使用
()
,但它们不会导致任何实际问题

%if &control1 in &list %then %do;
SELECT语句在所选的两个变量之间缺少逗号

select id,count(id) as number
HAVING子句中的条件语法无效。您是否正在尝试测试计数是否大于1?另外,如果要引用已计算的变量,则需要使用computed关键字

having calculated number > 1

最后,在宏中引用两个未由代码定义(甚至未记录在注释中)的宏变量CONTROL1和Produit可能会造成混淆。它们不是输入参数。您尚未将它们声明为本地宏变量。或者做任何事情来确保它们的存在。

非常感谢您的回答,我刚刚纠正了您告诉我的错误。
having calculated number > 1