我在SAS工作,我有一个包含2列的数据集,我不仅要删除重复项,还要删除“几乎”重复项。数据如下所示:
**Brand Product**
Coca Cola Coca Cola Light
Coca Cola Coca Cola Lgt
Coca Cola Cocacolalight
Coca Cola Coca Cola Vanila
Pepsi Pepsi Zero
Pepsi Pepsi Zro
我不知道它是否真的有可能,但删除“重复”之后我希望文件看起来像是这样:
**Brand Product**
Coca Cola Coca Cola Light
Coca Cola Coca Cola Vanila
Pepsi Pepsi Zero
如果决赛桌有例如,我没有偏好“Pepsi Zero”或“Pepsi Zro”只要没有“重复”值。
我在想是否有办法比较例如首先是4-5个字母,如果它们相同则将其视为重复字母。但我当然乐于接受建议。如果有一种方法可以在excel中完成,我很乐意听到它。
答案 0 :(得分:4)
我将直接引用杰夫的answer:
SAS至少有几个用于计算编辑距离的功能 在两个字符串之间:
已编辑,一般编辑距离: http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002206133.htm
Complev,Levenshtein距离: http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002206137.htm
还有用于比较编辑距离的spedis()
功能。
现在这些都很棒,但我个人最喜欢的是soundex()
功能,它可以让你测试两个单词是否有声音'相同。它不会100%正确,但在这种情况下,结果可以正常工作。
首先是一些数据:
Data HAVE;
attrib name length=$20 alt_name length=$20;
infile datalines dsd dlm=',' truncover;
input name $ alt_name $;
datalines;
Coca Cola ,Coca Cola Light
Coca Cola ,Coca Cola Lgt
Coca Cola ,Cocacolalight
Coca Cola ,Coca Cola Vanila
Pepsi ,Pepsi Zero
Pepsi ,Pepsi Zro
;
Run;
获取我们想要比较的每个单词组合,并为眼球计算soundex()
:
proc sql noprint;
create table cartesian as
select a.name,
a.alt_name as alt_name1,
b.alt_name as alt_name2,
soundex(a.alt_name) as soundex_a,
soundex(b.alt_name) as soundex_b
from have a, have b
where a.name = b.name
and soundex(a.alt_name) eq soundex(b.alt_name)
;
quit;
现在我将其留作可以重复使用结果列表的练习。但基本上这会告诉你哪些词匹配。如果您对匹配产生误报,只需将它们添加到例外列表中即可手动转换这些特定值。