【发布时间】:2019-05-09 10:18:21
【问题描述】:
我目前正在学习 Hash 合并并在这里有点挣扎。
第一个问题是在进行哈希合并时,应该对哪个表进行哈希处理,以及使用 set 语句读取哪个表?在下面的示例中,Tablex 位于 SQL 服务器上,并且有几百万条记录。 Table1 的记录数是 Tablex 的 10%,并且在我的工作临时文件夹中。
我只想从 TableX 中选择出现在 Table1 中的记录,下面的代码会是一个好方法吗?如果我也想使用条件来调节 TableX,我会怎么做让我们说开放日期 > '01 DEC 2010'd
还有可能有一个带有空格的变量作为关键变量还是我必须做重命名位?
Data merges;
if 0 then set server.Tablex(rename='account number'n=
account_number_full2) table1;
if _n_ = 1 then do;
declare hash tab2(dataset:'table1');
tab2.defineKey('Account_Number_full');
tab2.defineData(all:'YES');
tab2.defineDone();
end;
set Tablex(rename='account number'n= account_number_full2);
if tab2.find(key:account_number_full2) = 0
then output;
run;
【问题讨论】:
-
记住远程表中的每条记录都将被传输到 SAS 进行评估。减少“传输”的唯一方法是将
table1上传到服务器并在 SQL 服务器中执行传递连接。