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