2014-01-30 3 views
1

사람의 이름과 1-10 점을 얻은 횟수가있는 데이터 세트가 있습니다. 예를 들어, Bob은 7 1s, 8 2s 및 7 4s를 기록했지만 다른 점수는받지 못했습니다.SAS 셀 수를 특정 값으로 변환

Name 1 2 3 4 5 6 7 8 9 10 
Bob 7 8 7 0 0 0 0 0 0 0 
Hal 9 3 1 0 0 0 0 0 0 0 

나는 내가하는 방식으로 SAS에서이 일을하고있어이

Bob 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 
Hal 1 1 1 1 1 1 1 1 1 2 2 2 3 

과 같은 밥에 대한 행이있는 데이터 세트를 원한다.

나는 score1, score2, ..., scoreN이라는 변수를 만들 매크로를 작성할 수 있음을 알고 있습니다.

세포를 채우는 데 문제가 있습니다. 어떤 도움을 주시면 감사하겠습니다. 감사.

+0

당신이 당신의 원본 데이터 셋의 샘플을 제공 할 수 있습니까? –

+0

드미트리 - 원본 데이터 세트에서 Bob이 어떻게 보이는지 스냅 샷을 포함했습니다. – pyll

답변

1

이러한 일 - 데이터 세트의 구조를 변경 - 때때로 PROC의 TRANSPOSE 함께 할 쉽게 :

data have; 
    input Name $ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10; 
    datalines; 
Bob 7 8 7 0 0 0 0 0 0 0 
; 
run; 

/*convert original wide dataset into long one*/ 
proc transpose data=have out=have_long; 
    var v:; 
    by Name; 
run; 

data want; 
    set have_long; 
    substr(_NAME_,1,1)=""; *to get rid of first 'v' in variables' names; 
    do i=1 to COL1; 
     new_var=_NAME_; 
     output; 
    end; 
    drop _NAME_ COL1 i; 
run; 

/*convert back to wide dataset*/ 
proc transpose data=want out=want(drop=_NAME_); 
    var new_var; 
    by Name; 
run; 
+0

이것은 완벽합니다. 좋은 옛 proc 전치! 고마워요, 드미트리 – pyll