我正试图找到用尽可能替换所有可能的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;
这两个数据集已按Date
和Property
排序。目前我是通过
data WANT;
set TABLE1 TABLE2;
run;
但问题是两个表中的记录总数都很大。上述代码需要20分钟甚至更长时间才能完成此连接。
我知道如何使用哈希对象来获取外连接结果。但是如何将它用于此目的呢?
答案 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
的文档。