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

SAS中的哈希对象-是否可以使用哈希对象连接下面的两个表?,sas,concatenation,hashtable,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

我正试图找到一种方法,尽可能用哈希替换所有可能的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;
两个数据集都已按
日期
属性
排序。目前我通过

data WANT;
set TABLE1 TABLE2;
run;
但问题是两个表中的记录总数都相当大。上述代码需要20分钟甚至更长时间才能完成此连接


我知道如何使用hash对象来获得外部连接结果。但是如何将其用于此目的呢?

您随后是否在其他步骤(数据或过程)中使用您的
WANT
datastep,例如对其进行汇总或细分

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

data want /view=want ; set table1 table2 ; run ; /* Then use `want` elsewhere... */ proc summary data=want ... ; ... run ; 数据需要/视图=需要; 设置表1和表2; 跑 /*然后在其他地方使用'want'*/ proc summary data=want; ... 跑
但是。。。如果多次使用
want
,将其构建为一个表可能会更有效(在术语、时间或I/O方面)。

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

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

如果你真的感兴趣的话,可以通过使用散列迭代器进行追加,但我不想麻烦你。正如其他用户所建议的,在这里添加是一种方式,因为它将减少I/O需求。查看
proc append
的文档了解更多详细信息。

对于哈希对象,哪一个应该是“基本”表,小的还是?您希望避免对大表进行排序,因为大表可能太大,无法放入可用内存,因此您将小表作为哈希对象加载到内存中。