select 多个数据集公共列的最大值

select maximum value of common column for multiple data set

我有一个每日计划流程,它刷新同一个库中的一堆表。在流程结束时,所有表都应具有相同的最新记录。我想通过检查 date.

的最大值来仔细检查这一点

但问题是,如何快速提取这些表中日期的所有最大值,然后进行比较?

proc sql;
select max(date) from lib.table1;
select max(date) from lib.table2;
select max(date) from lib.table3;
...
quit;

简单来说SQL它看起来像

select 'table1' table_name, max(date) max from lib.table1
union all
select 'table2' table_name, max(date) max from lib.table2
union all
select 'table3' table_name, max(date) max from lib.table3

其他选项包括存储过程、内嵌视图等等。

如果它们都是巨大的数据集(我猜它们是)那么你最好在你必须比较的每个数据集的最后一个处理数据步骤中删除最大日期的保留 - 然后将这些保存到宏变量:

data table1(drop=maxdate) ;
  retain maxdate ;
  set _table1 end=eof ;
  *** other code here ;

  if date>maxdate then maxdate=date ;
  if eof then call symput('table1mdt',maxdate) ;
run ;

然后您可以将这些写到报告中,例如 ;

data _null_ ;
  put "Table1 max date= &table1mdt" ;
  put "Table2 max date= &table2mdt" ;
run ;

创建一个视图,将日期变量和 select 变量的最大日期附加到所有表中。如果您的表没有相同的结构,您可以修改 set 语句以仅保留日期变量。无论如何你可能想要加快这个过程。

data max_date/view=max_date;
   set table: indsname=source;
   dset=source;
   keep date dset;
run;

proc sql;
  create table maximum_date as
  select max(date) as Latest_Date 
  from max_date
  group by dset;
 quit;