proc sql中的模糊匹配,选择最小距离

时间:2017-11-14 10:01:31

标签: sas fuzzy-search proc-sql

我有一个包含一些模糊变量的列表和一个包含一些干净变量的列表。我想要(模糊)匹配它们两者,其中合成距离最低并且满足关于它们的编辑距离的一些规则(f.ex.compged< 100和spedis< 50)。我尝试了以下代码

proc sql noprint;
create table out as
select min(compged(fuzzy.fuzzy_title,clean.cleaned_title,100)) 
as comp,
fuzzy.fuzzy_title, clean.cleaned_title
from fuzzy inner join clean
on (compged(fuzzy.fuzzy_title,clean.cleaned_title,100) < 100 and 
spedis(clean.cleaned_title,fuzzy.fuzzy_title) < 50);
quit;

数据集模糊和干净基本上只包含我想要匹配的标题。我使用的代码只给出了整个数据集的最小组合分数,然后是一些任意匹配,其中我的条件是关于距离的满足。有没有办法为给定的fuzzy_title选择具有最小组合分数的clean_title?我可能搜错了,但我找不到答案。

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找group by + having

   proc sql;
    create table out as
    select 
         compged(fuzzy.fuzzy_title,clean.cleaned_title,100)as comp
        ,fuzzy.fuzzy_title
        ,clean.cleaned_title
    from fuzzy inner join clean
        on (compged(fuzzy.fuzzy_title,clean.cleaned_title,100) < 100 
        and spedis(clean.cleaned_title,fuzzy.fuzzy_title) < 50)
    group by fuzzy.fuzzy_title
    having calculated comp = min(compged(fuzzy.fuzzy_title,clean.cleaned_title,100))
    ;quit;

如果有更多fuzzy_title + cleaned_title对具有相同的comp值,则所有这些对都将在输出中。您只能在一个查询中选择其中一个。但是,我认为将这些步骤分开并在另一个查询中为每个fuzzy_title选择一行更容易(例如,使用first数据步骤变量)。