Proc Sql中的SAS子查询

问题描述 投票:0回答:1

我有一个包含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 subquery sas proc
1个回答
1
投票

您无法从另一个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;
© www.soinside.com 2019 - 2024. All rights reserved.