SAS包含所有代码

时间:2016-12-02 15:42:39

标签: sql database sas

使用SAS(Proc SQL)可以进行大量数据下载。

有时我需要查看特定客户编号或几个客户编号,并且通常需要每个客户编号。

我想设置一个宏变量,以便用户可以输入他们需要的客户编号,或者可以输入一些包含所有内容的简短版本。

即。 %let dCustomer_Number = in(3123,1234)其中& dCustomer_Number将位于查询的WHERE部分中。

一位同事告诉我,在SQL中你可以使用*(星号)来包含每个客户编号。

我遇到的最接近的是'%',但这似乎不适用于数字变量。有类似的东西会起作用吗?

我知道删除客户编号过滤器的where语句可能很容易,但我不希望用户必须实际更改代码,只需要在开始时更改宏变量。

由于

1 个答案:

答案 0 :(得分:0)

根据客户编号列表是否为空,生成不同的where子句。通常,您可以使用明显真实的表达式(例如1=1)添加到WHERE子句中,以便您的完整语句语法不会发生变化。

如果您没有使用宏,可以使用IFC()函数有条件地生成where子句

%*let dCustomer_Number = 3123,1234 ;
%let dCustomer_Number = ;
%let where_clause = %sysfunc(ifc
   (%length(&dCustomer_Number)
  ,(Customer_Number in (&dCustomer_Number))
  ,(1=1)
));
...
where &where_clause;