我有两个文件,我希望按名称匹配,我想通过使用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;
答案 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
计算。