过程中的模糊匹配 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
数据步骤变量)。
我有一个包含一些模糊变量的列表和一个包含一些干净变量的列表。我想(模糊)匹配它们,其中 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
数据步骤变量)。