我有一个凌乱的数据集,其中包含数百个管理器名称,其中一些具有中间名首字母,一些没有(这会增加唯一管理器名称的数量以及由管理器名称运行的任何分析)。我想尽可能使用最完整的名称并替换较短的名称,即如果管理器名称包含中间名称,它将使用它来替换较短的管理器名称。下面是一个假名称的示例数据集:
data test;
input project name $50.;
datalines;
1 Farmer,Richard
2 Farmer,Richard L
3 Farmer,Richard
4 Farmer,Richard
5 Farmer,Richard L
6 Rooney,Douglas
7 Rowe,Jamie Elaine
8 Rowe,Jamie
9 Rowe,Jamie
10 Rowe,Jamie Elaine
11 Smith,Mary-Lou
12 Needs,Mark
13 Needs,Mark H
14 Smith,Marie
;
run;
因此,我希望将所有Farmer,Richard
名称替换为Farmer,Richard L
,并将其他名称替换为first.
。有一个快速的方法吗?我尝试了last.
和DQMATCH
方法,计算,滞后,似乎无法找到顺畅的清洁方法。 <u> and </u>
似乎做了我想要的,但我没有获得许可。有什么见解吗?
答案 0 :(得分:3)
我发现SAS不太适合处理这种事情。您是否必须在SAS中执行此操作?一些需要考虑的替代方案是:
OpenRefine tool(以前称为GoogleRefine,因为它最初是在那里开发的)。开始使用它相当容易,并且在各种数据清理方面非常棒。 old documentation page上有一些不错的介绍性视频。 (您需要做的就是读入您的数据,在名称列上创建&#34;文本方面&#34;然后使用群集算法。希望这将有助于您开始使用。)
如果你可以使用Perl,python或类似的东西,你可以使用&#34; fingerprint&#34;便于匹配的概念。 (OpenRefine使用它作为其基本技术之一,但你可以使用它。)我确信这种方法也可以用SAS编码。为每个姓名指纹后,您可以在指纹足够接近时对其进行分组 - 如果您愿意,可以使用SAS中的complev
功能测量距离。