我有一个包含libnames列表及其表的表。我想创建一个子查询来返回每个列出的表的最小创建日期,将libname和表作为子查询中使用的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值没有执行,它只创建一个字符串值,如“(从pvaprov.institutional中选择min(createdon)”)。
libname和表已正确解析,但如何将语句作为子查询执行?
您无法从另一个SQL查询动态调用sql查询。此解决方案使用datastep并调用execute来执行proc sql并将结果附加到基础数据集。
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;