过程中的模糊匹配 sql, select 最小距离

Fuzzy match in proc sql, select minimum distance

我有一个包含一些模糊变量的列表和一个包含一些干净变量的列表。我想(模糊)匹配它们,其中 compged 距离最低并且满足一些关于它们的编辑距离的规则(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?我可能搜索错了,但我找不到这个问题的答案。

我想你正在寻找 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 值,它们将全部出现在输出中。在单个查询中,您只能 select 其中一个。但是,我认为将这些步骤分开并在另一个查询中为每个 fuzzy_title select 一行更容易(例如使用 first 数据步骤变量)。