2017-10-31 1 views
0

데이터 단계를 사용하여 내 데이터를 긴 형식에서 넓은 형식으로 변환하고 싶습니다. 문제는 누락 된 값으로 인해 값이 올바른 셀에 배치되지 않는다는 것입니다. 누락 된 값에 대한 자리 표시자를 포함해야하는 문제를 해결할 것으로 생각합니다.데이터를 사용하여 데이터가 누락 된 SAS/전체에서 길게

문제는 어떻게해야할지 모릅니다. 누군가가 그것에 대해 어떻게 가야할지에 대한 조언을 해줄 수 있습니까?

data tic; 

input id country$ month math; 

datalines; 
1 uk 1 10 
1 uk 2 15 
1 uk 3 24 
2 us 2 15 
2 us 4 12 
3 fl 1 15 
3 fl 2 16 
3 fl 3 17 
3 fl 4 15 
; 
run; 

proc sort data=tic; 
by id; 
run; 


data tot(drop=month math); 
retain month1-month4 math1-math4; 
array tat{4} month1-month4; 
array kat{4} math1-math4; 
set tic; 

by id; 

if first.id then do; 
    i=1; 
    do j=1 to 4; 
     tat{j}=.; 
     kat{j}=.; 
    end; 
end; 

tat(i)=month; 
kat(i)=math; 

if last.id then output; 

i+1; 

run; 

편집 나는 마지막으로 문제가 무엇인지 알아 냈 :

은에 코드

tat(i)=month; 
kat(i)=math; 

의 라인을 변경 :

tat(month)=month; 
kat(month)=math; 

그것은 문제를 해결했습니다.

+0

데이터를 표시하려는 예제를 추가 할 수 있습니까? 나는 네가 찾고있는 것을 이해하지 못한다. – DomPazz

답변

0

키가 크고 스키니가 짧거나 길게 변환되는 데이터는 범주 형 데이터가 열 이름으로 끝나는 경우가 많습니다. 이것은 데이터를 메타 데이터로 옮기는 과정으로 나중에 BY 또는 CLASS 그룹을 처리 할 때 문제가 될 수 있습니다.

SAS에는 피벗 출력 생성을위한 Proc TABULATE 및 Proc REPORT가 있습니다. Proc TRANSPOSE는 피벗 된 데이터를 생성하는 좋은 표준 방법이기도합니다.

한 번에 두 개의 열을 피봇 팅합니다. 트랜스 포스는 멀티 피벗 할 수 없습니다. 데이터 스텝 접근 방식은 인덱스가 알려진 범위 내에있을 때 트랜스 포즈 변환을 수행하는 일반적인 방법입니다. 귀하의 경우 배열 선언은 색인을 통한 '직접 주소 지정'이 모든 데이터에서 발생하는 최소 및 최대 월 값을 처리 할 수 ​​있도록해야합니다.

관련 문제