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