使用SAS或Excel删除“几乎重复”

我在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 

只要没有“重复”的数值,如果决赛桌上有例如“百事可乐”或“百事可乐”,我就没有偏好。

我在考虑是否有办法比较第一个4-5个字母,如果他们是相同的,那么把它们看作是重复的。 但我当然愿意提出build议。 如果在excel中还有一个办法可以做的话,我会很乐意听到。

我要直接引用杰夫的回答 :

SAS至less有两个函数用于计算两个string之间的编辑距离:

编译,一般编辑距离: http : //support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002206133.htm

Compleve,Levenshtein距离: http : //support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002206137.htm

还有用于比较编辑距离的spedis()函数。

现在,这些都是伟大的,但我个人最喜欢的是soundex()函数,它将允许您testing两个单词“声音”是否相同。 这不会是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; 

现在,我将把它作为一个练习去剔除结果列表。 但基本上这会告诉你哪些词匹配。 如果你得到的结果是误报,只要将它们添加到例外列表中手动转换这些特定的值。