2013-08-06 16 views
0

我有100万行以上的数据,列上的是channel_name。收集数据的人似乎并不在乎他们以大约10种不同的变化形式进入了一个频道,其中很多变体包含@符号。谷歌搜索没有给我任何体面的文档,任何人都可以指导我一些有用的东西?编辑统一数据的分类数据

+0

尝试模式匹配[这里](http://support.sas.com/kb/25/278.html)使用PROC SQL – scott

+0

由于它是由SAS拥有,机构Dataflux也许是值得一提。这是一个完全针对数据清理的不同产品(与SAS紧密集成),其中包括您提到的内容。当然,如果这真的是你遇到这种问题的唯一例子,那么这很可能是过度的。 – mvherweg

回答

1

在一定程度上的答案是,“这取决于”。您的实际数据将确定最佳解决方案;并且可能没有一个真正的解决方案 - 您可能需要尝试几件事情,并且可能会有比您想要的更多的手动工作。

一种选择是基于你所看到的建立一个格式。该格式可以将各种值转换为一个一致的值,或者转换为数字类别(然后用显示一致值的格式覆盖)。

例如,您可能有“通道”的零售商店: 数据有; infile datalines trunco​​ver; 输入@ 1个频道$ 8。 datalines; 百思买 百思买 BB ;;;; 跑;

所以,你可以做两件事情之一:

proc format; 
value $channel 
"Best Buy","BB","BestBuy" = "Best Buy"; 
quit; 

data want; 
set have; 
channel_coded = put(channel,$channel.); 
run; 

或者,你可以这样做:

proc format; 
invalue channeli 
"Best Buy", "BB","BestBuy" = 1 
; 
value channelf 
1 = "Best Buy" 
; 
quit; 


data want; 
set have; 
channel_coded = input(channel,CHANNELI.); 
format channel_coded channelf.; 
run; 

,你要做的就是在很大程度上取决于你 - 后者让你在长期更大的灵活性运行,例如Sears和K-Mart合并时,采用2和16,然后格式化为Sears,而不是改变字符格式的存储值 - 在KMart分离时更容易回滚再次。

这确实需要一些手工的工作,虽然,你必须在这里手工编写代码,或者开发一些方法来确定编码是什么。您可以使用proc格式的other选项轻松识别新值并将其添加到格式中(可以从数据集中导出,而不是手写代码),但在一天结束时,您确定的实际值解决方案最适合于确定什么是“最佳购买”的实际工作,而手边解决方案(每次有新的价值出现时,都由一个人来看待并编码)最终可能是最好的。

+0

这是一个好方法。不仅格式非常高效(内存查找),它们比哈希表更容易“读取”(对于其他程序员来说,更好地了解您所做的工作) –