excel - 使用 SAS 或 Excel 删除 "almost duplicates"

标签 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

我不偏好决赛 table 是否有例如“Pepsi Zero”或“Pepsi Zro”,只要没有“重复”值即可。

我在想是否有一种方法可以比较例如前 4-5 个字母,如果相同则将其视为重复。但我当然愿意接受建议。如果有一种方法可以在 excel 中完成,我很想听听。

最佳答案

我将首先直接引用 Jeff 的 answer :

SAS has at least a couple functions for calculating edit distance between two strings:

Compged, for general edit distance: http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002206133.htm

Complev, for Levenshtein distance: 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;

现在我将把它留作练习,以对结果列表进行重复数据删除。但基本上这会告诉你哪些词是匹配的。如果匹配出现误报,只需将它们添加到异常(exception)列表中即可手动转换这些特定值。

关于excel - 使用 SAS 或 Excel 删除 "almost duplicates",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29373148/

相关文章:

java - 在 OpenMetadata 接口(interface)中使用 OMI_IGNORE_NOTFOUND 标志

vba - UsedRange.Count 计数错误

excel - 通过 TagName 进行网页抓取

c# - 使用 C# 设置 Excel 工作表的字体

excel - 将单元格复制到新工作表列时出现错误 429 "Activex component can' t 创建对象

sas - 文字包含不匹配的引号。 (SAS)

excel - 使用 CDO.sys dll 在 VBA 中发送消息会卡住 Excel

sas - 按组划分的 SAS 中的日期差异

directory - 如何从 SAS 中的目录和子目录(包括路径和数据集名称)获取所有列名称

sas - 是否可以查看哪个程序创建了一个表和/或最后修改了它?