Proc-Sql中的SAS子查询

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

我有一个表,其中包含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 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来执行每条语句。