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

Sas 模糊匹配在proc sql中,选择最小距离,sas,fuzzy-search,proc-sql,Sas,Fuzzy Search,Proc Sql,我有一个带有模糊变量的列表和一个带有干净变量的列表。我想(模糊)匹配这两种情况,其中compged距离最低,并且满足有关其编辑距离的一些规则(例如compged

我有一个带有模糊变量的列表和一个带有干净变量的列表。我想(模糊)匹配这两种情况,其中compged距离最低,并且满足有关其编辑距离的一些规则(例如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;
procsqlnoprint;
创建表输出为
选择最小值(比较(模糊.模糊标题,清洁.清洁标题,100))
作为首席执行官,
fuzzy.fuzzy\u标题,clean.cleaned\u标题
从模糊内连接到清洁
on(comped(fuzzy.fuzzy_title,clean.cleaned_title,100)<100和
spedis(清洁、清洁、模糊、模糊标题)<50);
退出

数据集fuzzy和clean基本上只包含我想要匹配的标题。我使用的代码只给出了整个数据集的最小compged分数,然后在满足距离条件的情况下进行任意匹配。对于给定的模糊标题,有没有一种方法可以精确地选择具有最低综合得分的干净标题?我可能搜索错了,但我找不到这个问题的答案。

我想您正在寻找
分组依据
+
拥有

   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;
proc-sql;
创建表输出为
挑选
comped(fuzzy.fuzzy\u title,clean.cleaned\u title,100)作为comp
,fuzzy.fuzzy\u标题
,clean.cleaned_标题
从模糊内连接到清洁
on(复合(模糊.模糊标题,清洁.清洁标题,100)<100
和spedis(干净、干净、模糊、模糊标题)<50)
按fuzzy.fuzzy\u标题分组
已计算comp=min(compged(fuzzy.fuzzy\u title,clean.cleaned\u title,100))
;退出

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

如果您能为数据集提供一些示例数据fuzzy和clean,以及您期望的输出,这会有所帮助