2017-11-02 12 views
-1

Teradata Sql (가능한 경우 SAS에서 수행 할 수 있음) 한 필드에 중복 값이 ​​하나 이상있는 몇 개의 필드에 대해 중복을 근절하려고합니다. 주어진 신분증. 그 칼럼에서 새로운 고유 한 가치를 잃고 싶지 않으므로 새로운 칼럼으로 쓰고 싶습니다. 여러 개의 별개 값이있을 수 있으므로 각 별개를 동적으로 카운트하고 각각에 대해 새 열을 써야합니다.동일한 ID에 대해 고유 한 행 값을 쓰기 위해 동적으로 새 컬럼을 작성하십시오.

ID | V1 | V2 | 
A | Mike | 25 | 
A | Mike | 26 | 
A | Mike | 27 | 

하려면 :

ID | V1 | V2 | V2.1 | V2.2 | 
A | Mike | 25 | 26 | 27 | 
+0

다른 마이크 행을 삽입하면 어떻게 될까요? 네 번째 열이 갑자기 나타나기를 원합니까? – jarlh

+0

@ jarlh 예, Mike가 새로운 "ID"가 될 때까지 열을 추가하고 싶습니다. – CGermain

답변

1

이 동적으로 새 열을 생성 할 proc transpose 사용하여 SAS 쉽게 수행 할 수 있습니다 아래 테이블 예이다. 이 경우 by 변수를 id (또는 idV1의 조합)으로 설정합니다.

data tmp; 
input id $ V1 $ V2; 
    datalines; 
A Mike 25 
A Mike 30 
B Mark 4 
C Mack 23 
C Mack 40 
C Mack 90 
; 
run; 

proc sort data=tmp; 
by id v1; 
run; 

proc transpose data=tmp out=trans; 
by id V1; 
var v2; 
run; 

proc print; 

결과 출력은 다음과 같습니다

문서에 출력의 이름을 변경하기 위해 사용할 수있는 다른 선택의 여지가 있습니다
Obs id  V1  _NAME_ COL1 COL2 COL3 

1  A  Mike  V2  25  30  . 
2  B  Mark  V2  4  .  . 
3  C  Mack  V2  23  40  90 

.

+0

고마워, 이것을 시험해 보겠습니다. 이 작업을 수행하는 데 필요한 몇 개의 열이 있음을 언급하는 것을 잊었습니다. 그래서 proc transpose에서 여러 var 사용할 수 있습니까? – CGermain

+0

예, 여러 개의 병을 사용할 수 있습니다. 그것들은 기본적으로'_NAME_' 변수 아래에 나열 될 것입니다. –

+0

나는 _NAME_ 열의 V2를 이해하지 못하고 있다고 생각합니다. Mi, Mark, Mack이 각각 ID A, B, C일까요? 나는 이것을 실행하려고 시도했다. 5 개의 변수와 SAS EG가 얼어 붙었다. 더 작은 데이터 세트를 시도 할 것이다. – CGermain