2013-08-06 3 views
0

У меня есть 1 миллион + строк данных, а по столбцам - имя_канала. Люди, собирающие данные, по-видимому, не заботятся о том, чтобы они вошли в один канал примерно в 10 различных вариациях, многие из которых содержат символ @. Поиск в Google не дает мне приличной документации, может ли кто-нибудь направить меня к чему-то полезному?редактирование категориальных данных для однородности

+0

попробуйте шаблон соответствия [здесь] (http://support.sas.com/kb/25/278.html), используя proc sql – scott

+0

Поскольку он принадлежит SAS, возможно, стоит упомянуть Dataflux. Это другой продукт (с тесной интеграцией в SAS), который нацелен именно на очистку данных, включая такие вещи, как вы упоминаете. Конечно, если это действительно единственный случай, когда у вас есть такая проблема, это, скорее всего, излишнее. – mvherweg

ответ

1

В какой-то степени ответ должен быть «зависит от этого». Ваши фактические данные будут определять наилучшее решение этого; и может быть не одно истинное решение - вам, возможно, придется попробовать несколько вещей, и может быть больше ручной работы, чем хотелось бы.

Один из вариантов - создать формат, основанный на том, что вы видите. Этот формат может либо преобразовывать различные значения в одно согласованное значение, либо преобразовывать в числовую категорию (которая затем накладывается на формат, который показывает согласованное значение).

Например, у вас может быть «канал» в качестве розничного магазина: данные есть; Передатчик данных infile datalines; ввод @ 1 канал $ 8; datalines; Best Buy BestBuy BB ;;;; run;

Таким образом, вы можете сделать одну из двух вещей:

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 отделится еще раз.

Это требует некоторой ручной работы; вам нужно закодировать вещи вручную или разработать какой-то метод для определения того, что такое кодирование. Вы можете использовать опцию other в формате proc, чтобы легко идентифицировать новые значения и добавить их в формат (который может быть получен из набора данных вместо письменного кода), но в конце дня фактические значения, которые вы определяете, решение лучше всего подходит для фактической работы по определению того, что является «Лучшей покупкой», и пошаговое решение (каждый раз, когда новое значение приходит, оно рассматривается человеком и закодировано) в конечном итоге может быть лучшим.

+0

Это хороший подход. Мало того, что форматы очень эффективны (просмотр в памяти), они также намного легче «читать», чем, скажем, хэш-таблицы (лучше для других программистов понять, что вы сделали) –

Смежные вопросы