SAS:使用宏运行SQL查询
使用thread提供的答案,我试图使用以下代码。我在一个表中有一个sql查询列表,每个查询都有一个id。现在我想把这些查询的结果加上id作为另一个表SAS:使用宏运行SQL查询,sas,sas-macro,proc-sql,Sas,Sas Macro,Proc Sql,使用thread提供的答案,我试图使用以下代码。我在一个表中有一个sql查询列表,每个查询都有一个id。现在我想把这些查询的结果加上id作为另一个表 /* The Macro */ %macro run_query(q,id); proc sql noprint; select count into: count from (&q.) a; quit; %mend; /* Some fake-data */ DATA queries; INPUT id
/* The Macro */
%macro run_query(q,id);
proc sql noprint;
select count into: count
from (&q.) a;
quit;
%mend;
/* Some fake-data */
DATA queries;
INPUT id :$12. query :$3000.;
INFORMAT id $12.;
INFILE DATALINES DSD;
DATALINES;
01,SELECT COUNT(*) AS count FROM sashelp.bweight WHERE Married=1
0101,SELECT COUNT(*) AS count FROM sashelp.bweight WHERE Boy=1
0102,SELECT COUNT(*) AS count FROM sashelp.bweight WHERE Black=1
;
RUN;
/* Make a copy of the dataset */
DATA want;
SET queries;
RUN;
/* Insert the results */
data want;
set queries;
call execute(%nrstr(%run_query('||query||','||id||')));
run;
有人能看出问题出在哪里吗?错误报告如下所示:
在第/*部分插入结果*/您基本上是通过数据步骤将所有值/结果发送到dev null中:
data _null_;
相反,请尝试:
data want;
第二部分你可以试试这个 在宏中使用proc sql提取计数,并使用变量count1、count2、count3构建数据集
%macro a;
proc sql;
select count(*) into :count1 FROM sashelp.bweight WHERE Married=1;
SELECT COUNT(*) into :count2 FROM sashelp.bweight WHERE Boy=1;
SELECT COUNT(*) into :count3 FROM sashelp.bweight WHERE Black=1;
quit;
DATA queries;
length id $12 query $3000;
format id $12. query $3000.;
infile datalines delimiter=',';
input id $ query $;
datalines;
01,&count1
0101,&count2
0102,&count3
;
run;
%mend a;
/*Call above maco*/
%a;
谢谢不幸的是,这并没有多大改变,因为我仍然得到一个错误(见上图),显示实际日志(而不是摘要)中的行文本,以便您可以看到标记的代码。确保打开MPRINT选项,以便在日志中看到宏生成的代码。为什么宏有第二个输入?它没有被使用。我看不出您在哪里预先定义了目标宏变量计数。如果它不存在,它将位于宏的本地并消失。但您似乎在下一次调用时写得太多了。
execute()
接受字符串参数。您已经提供了开放代码。您是否可以尝试使用单引号而不是使用%nrstr
引用它。此外,如果您提供SAS生成的完整日志,这将非常有用