错误:在贡献表中未找到以下列

时间:2018-09-08 23:28:54

标签: sql-server sas sas-macro

这是代码本身-在将内部内容封装到宏之前,所有方法都有效:

%macro test(product, dedi, pfi,md,sd,cIi,cIIi,cIIIi,cIo,cIIo,cIIIo,bm);
%let product = ∏
<more let statements here for all variables>

<data pull happens here>

PROC SQL;
CREATE TABLE WORK.ProdFilter AS 
SELECT t1.*
  FROM WORK.PRODCLAIMS2 t1
  WHERE t1.Product_Type = &Product
;QUIT;

<more code here> 
%mend

%test(&product, &dedi, &pfi,&Ded, &Sd,&CIib, &CIIib,&CIIIib, &CIob, &CIIob,&CIIIob,&bm);

它能够成功运行数据提取,然后在我第一次尝试使用变量时崩溃。这些是使用提示的用户定义变量,这似乎也可以正常工作,但随后出现错误:

“错误:在贡献表中未找到以下列:DenP”

DenP是用户输入,我知道它是一种产品。但是它不是一列-该列是t1.Product_Type,我试图仅过滤到该列中带有'DenP'的行。如果不在宏中,则此步骤可以正常工作。

我很确定这与我编写和调用宏本身的方式有关,或者可能是因为对我如何命名提示感到生气?我以第一个%let语句为例-也许如果我对提示的命名不同,会有所不同吗?

我们从来没有去过,因为它因第一个错误而中断。关于问题起源的任何指导都将有所帮助-我以为我应该在宏()中列出变量,但也许我应该列出其他内容?

1 个答案:

答案 0 :(得分:3)

您需要引用该值,以便SAS知道您正在与字符串而不是另一列进行比较。

PROC SQL;
CREATE TABLE WORK.ProdFilter AS 
SELECT t1.*
  FROM WORK.PRODCLAIMS2 t1
  WHERE t1.Product_Type = "&Product"
;QUIT;