使用SAS proc sql进行模糊合并

时间:2016-06-02 05:14:53

标签: sql merge sas proc-sql fuzzy-comparison

我有两个文件,我希望按名称匹配,我想通过使用compged函数来考虑拼写错误。名称已经彻底清理,我没有其他有用的匹配变量可用于减少搜索空间。

文件name1和name2各有超过500k行,因此11小时后这段代码没有运行。

有没有什么方法可以更有效地编码,或者我的问题纯粹是由于计算能力?

proc sql;
  create table name1_name2_Fuzzy as
    select a.*, b.*
      from name1 as a 
       inner join name2 as b
               on COMPGED(a.match_name, b.match_name) < 200;
quit;

2 个答案:

答案 0 :(得分:1)

你有一个你没有使用的合成函数中的参数,这可以提高性能(可能是6或7小时而不是11 ..)。

此参数是截止值。如果选择300作为截止值,当单词之间的距离达到300时,sas将停止计算并输出300.

所以在你的情况下,你应该选择一个截止值> 200(而不是&gt; = 200)。

Complev功能比Compged快。如果您不需要每个操作的确切成本(使用call compost例程),您可以使用它而不是compged,并且您可以减少几分钟或几小时的计算。 Complev也有截止选项。

希望这有帮助!

答案 1 :(得分:0)

在这里处理内存,但如果每个com.entity.Days的第一个字符不同,match_name将超过200,是吗?所以,你不会认为他们匹配?

如果是这样,请在每个表中创建一个带有COMPGED第一个字符的索引列,并在match_name之前加入该列。这应该消除大多数不匹配,到目前为止需要更少的COMPGED计算。