2013-08-06 2 views
0

위해 나는 데이터의 100 만 개 + 행이하고 열의에 CHANNEL_NAME입니다. 데이터를 수집하는 사람들은 약 10 개의 서로 다른 유사 콘텐츠에서 하나의 채널에 들어 왔음을 신경 쓰지 않았으며 그 중 많은 부분에 @ 기호가 포함되었습니다. Google 검색은 나에게 적절한 문서를 제공하지 않습니다. 누군가 나를 유용하게 안내 할 수 있습니까? 대답은 "이 달려있다"이어야 어느 정도편집 범주 데이터는 균일

+0

시도 패턴 매칭은 [여기] (http://support.sas.com/kb/25/278.html)가 SAS에 의해 소유되어 있기 때문에 시저의 SQL – scott

+0

를 사용하여, 인 DataFlux는 언급 어쩌면 가치가있다. 귀하가 언급 한 것을 포함하여 데이터 정리를 정확히 목표로하는 다른 제품 (SAS와 긴밀하게 통합되어 있음)입니다. 물론, 이것이 정말로 당신이 그런 문제를 가지고있는 유일한 경우라면, 그것은 아마도 과잉 공격 일 것입니다. – mvherweg

답변

1

. 실제 데이터가 이에 대한 최상의 솔루션을 결정합니다. 진정한 해결책이 하나도 없을 수도 있습니다. 몇 가지 시도를해야 할 수도 있습니다. 원하는 것보다 더 많은 수동 작업이 필요할 수도 있습니다.

하나의 옵션은 당신이 보는 것을 기반으로 형식을 구축하는 것입니다. 이 형식은 다양한 값을 하나의 일관된 값으로 변환하거나 숫자 범주 (일관된 값을 나타내는 형식으로 겹쳐)로 변환 할 수 있습니다.

예를 들어, 소매점 등의 '채널'이있을 수 있습니다 데이터가있다; infile 데이터 라인 truncover; 입력 @ 채널 $ 8 ;; 데이터 라인; 베스트 바이 (Best Buy) 베스트 바이 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가 병합 된 경우, 문자 형식의 저장된 값을 변경하는 것보다 Sears로 2와 16을 포멧 한 다음 KMart가 분리되는 경우 롤백하기가 더 쉬울 것입니다 다시.

일부 수동 작업이 필요합니다. 당신은 여기서 손으로 코드를 작성하거나 코딩이 무엇인지 알아내는 몇 가지 방법을 개발해야합니다. proc 형식의 other 옵션을 사용하여 새 값을 쉽게 식별하고 형식 (손으로 직접 작성한 코드 대신 데이터 세트에서 파생 될 수 있음)에 추가 할 수 있지만, 결국에는 실제 값으로 인해 솔루션은 "베스트 바이"가 무엇인지를 결정하는 실제 작업에 가장 적합하며, 직접 솔루션 (매번 새로운 가치가 등장 할 때마다 사람이 살펴보고 코딩 됨)이 궁극적으로 최고 일 수 있습니다.

+0

이것은 좋은 접근 방법입니다. 형식은 매우 효율적입니다 (메모리 내부 조회). 해시 테이블보다 '읽기'가 훨씬 쉽습니다 (다른 프로그래머가 수행 한 내용을 이해하는 것이 더 낫습니다) –