删除"几乎重复"使用SAS或Excel

时间:2015-03-31 16:01:51

标签: excel sas

我在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中完成,我很乐意听到它。

1 个答案:

答案 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;

现在我将其留作可以重复使用结果列表的练习。但基本上这会告诉你哪些词匹配。如果您对匹配产生误报,只需将它们添加到例外列表中即可手动转换这些特定值。