SAS中的哈希对象 - 是否可以使用哈希对象连接下面的两个表?

时间:2014-10-16 08:41:15

标签: sas concatenation hashtable

我正试图找到用尽可能替换所有可能的proc sql和常规合并的方法。 示例数据类似于

data TABLE1;
input Date Property $6. Headcount;
datalines;
01Jul2013 East  100
02Jul2013 East  50
02Jul2013 West  50
;
run;

data TABLE2;
input Date Property $6. Headcount;
datalines;
11Aug2013 East  60
02Oct2013 East  50
22Dec2013 West  40
run;

这两个数据集已按DateProperty排序。目前我是通过

来做的
data WANT;
set TABLE1 TABLE2;
run;

但问题是两个表中的记录总数都很大。上述代码需要20分钟甚至更长时间才能完成此连接。

我知道如何使用哈希对象来获取外连接结果。但是如何将它用于此目的呢?

2 个答案:

答案 0 :(得分:1)

您是否随后在其他步骤(数据或过程)中使用WANT datastep,例如总结或将其下放?

如果是这样,您可以通过将WANT指定为视图而不是表来减少I / O.

data want /view=want ;
  set table1 table2 ;
run ;

/* Then use `want` elsewhere... */
proc summary data=want ... ;
  ... 
run ;

但是......如果您多次使用want,那么将它构建为表格可能仍然更有效(在术语或时间或I / O方面)。

答案 1 :(得分:1)

在这种情况下,使用哈希对象不太可能获得很大的性能提升。使用哈希对象的主要好处是,它们允许您将来自一个或多个小数据集的值合并到更大的数据集上,而无需对大型数据集进行排序。在这种情况下:

  • 您的两个数据集都很大
  • 你没有做任何合并

如果您非常热衷,可以通过使用哈希迭代器进行追加,但我不会烦恼。正如其他用户所建议的那样,追加是这里的方法,因为它会降低I / O要求。有关详细信息,请查看proc append的文档。