这是代码本身-在将内部内容封装到宏之前,所有方法都有效:
%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语句为例-也许如果我对提示的命名不同,会有所不同吗?
我们从来没有去过,因为它因第一个错误而中断。关于问题起源的任何指导都将有所帮助-我以为我应该在宏()中列出变量,但也许我应该列出其他内容?
答案 0 :(得分:3)
您需要引用该值,以便SAS知道您正在与字符串而不是另一列进行比较。
PROC SQL;
CREATE TABLE WORK.ProdFilter AS
SELECT t1.*
FROM WORK.PRODCLAIMS2 t1
WHERE t1.Product_Type = "&Product"
;QUIT;