Proc-Sql中的SAS子查询
我有一个表,其中包含libnames及其表的列表。我想创建一个子查询来返回每个列出的表的最小createdon日期,并将libname和table作为子查询中使用的libname.table传递 我创建了以下内容:Proc-Sql中的SAS子查询,sql,subquery,sas,proc,Sql,Subquery,Sas,Proc,我有一个表,其中包含libnames及其表的列表。我想创建一个子查询来返回每个列出的表的最小createdon日期,并将libname和table作为子查询中使用的libname.table传递 我创建了以下内容: proc sql; create table createdon_min as select *, cats("(select min(createdon) from "||strip(libname)||"."||strip(table_name)||")") as CREATED
proc sql;
create table createdon_min as
select *,
cats("(select min(createdon) from "||strip(libname)||"."||strip(table_name)||")") as CREATEDON_FRM
from all_tables1
where freq="DAILY" AND part_date="CREATEDON";
quit;
不会生成错误,但createdon_frm值不会执行,它只会创建一个字符串值,如select mincreatedon from pvaprov.com
libname和table解析正确,但如何使语句作为子查询执行?不能从另一个sql查询动态调用sql查询。此解决方案使用datastep和callexecute执行procsql并将结果附加到基本数据集
data want;
length mincreatedon 8.;
stop;
run;
data _null_;
set all_tables1;
where freq="DAILY" AND part_date="CREATEDON";
call execute("proc sql;create table a as select min(createdon) as mincreatedon from "||strip(libname)||"."||strip(table_name)||";quit;proc append base=want data=a;run;");
run;
我不知道SAS proc sql支持动态sql/prepared语句。请使用SELECT INTO构造并将动态语句传递到宏变量中。然后使用宏循环构建一个新的PROC SQL来执行每条语句。