首页 > 解决方案 > 高效设计工作流程以将表格合并在一起

问题描述

我需要创建一个大约有 20k 行、10k 列的表。该表将通过合并数十个源表(例如 A、B、C、..、F)来创建,并且必须相应地对列进行排序(首先是 A 中的列,然后是 B 中的列,等等)。表 A 设置了分母,并具有最终表中所需的所有观察结果。所有表都具有相同的唯一键用于连接/合并。

每个源表相互独立。并且在源表准备好之前,无法知道源表中要合并的列数/哪些列。或者有时,源表在合并后需要再次更新。

我一直在做 A 左连接 B,左连接 C,左连接 D ......,并且我有每个合并的输出增量保存。

在需要将 C 更新为 C* 并再次合并回来的情况下。有没有一种方法可以有效地做到这一点,而不是对 C* 之后的表重新执行诸如合并 C*、合并 D 之类的操作。

或者有时我已经准备好了 A、B、D...F。我按照顺序合并了它们。然后C就准备好了。我需要将 C 合并到 A、B,然后重新对其他表重复合并。有什么方法可以重新考虑最终输出的创建,以避免冗余?

此外,是否应该在这件事的所有源表中创建键索引?

标签: sqlmergesasleft-join

解决方案


当我从 sql 数据库中提取数据时,这就是我所做的。我从不同的表中提取数据并主要按顺序创建单独的 sas 数据集,以便通过宏将它们分开合并。然后我根据公共键合并它们。

%macro merging(otds, dsnum, keyvar);
%do i=1 %to &dsnum;
data out&i;
set in&i;
if ^missing(&keyvar);
run;
%end;
%do i=1 %to &dsnum;
proc sort data=out&i nodupkey;
by &keyvar;
run;
%end;
data &otds;
  merge
  %do i = 1 %to &dsnum;
    out&i
  %end; 
  ;
  by &keyvar;
  if &keyvar ne .;
run;
%mend;

%merge(outds,10,Key_Or_Id);

所以在上面的代码中,我有 10 个表 in1-in10 并且这些表与公共键合并。如果稍后更新这些表中的任何一个,那么我们可以使用相同的方法再次合并..希望这会有所帮助!


推荐阅读