본문 바로가기
의학통계/SAS Tip

SAS에서 Wide, Long 포맷 데이터 변환하기

by boogler 2022. 7. 4.
반응형

SAS에서 Wide, Long 포맷 데이터 변환하기

 

SAS에서 Long format 으로 된것은 wide format 으로 wide format을 다시 long format으로 데이터 변환하는 것을 예제를 통해 간단하게 알아보겠습니다.


<Sample 데이터 생성>

 

ID별로 bmi, waist를 3번 측정한 값입니다.

 

data test_data;
input ID $3. gender $2. bmi1 bmi2 bmi3 wc1 wc2 wc3;
datalines;
A01 M 24 25 26 80 85 86
A02 M 25 24 25 80 78 81
A03 F 26 25 24 85 84 80
A04 F 20 21 22 75 76 77
;
run;

 

<Sample 데이터 형태>

 

Wide 를 Long format 으로
data long_test_data;
set test_data;
bmi=bmi1; wc=wc1;time=1; output;
bmi=bmi2; wc=wc2;time=2; output;
bmi=bmi3; wc=wc3;time=3; output;
drop bmi1-bmi3 wc1-wc3;
run;

Long format 결과

 

Long 을 Wide format 으로 

 

ID 별로 data를 읽으면서 array에 저장하여 wide 로 변환합니다. 결과적으로 처음 예제의 sample 데이터인 test_data와 동일한 데이터셋(wide_test_data)이 생성됩니다.

proc sort data=long_test_data;by ID time;

data wide_test_data;
set long_test_data;by ID time;

retain bmi1-bmi3;
retain wc1-wc3;

array aBMI(3) bmi1-bmi3;
array aWC(3) wc1-wc3;
if first.ID then
    do;
          do i = 1 to 3;
               aBMI( i ) = . ;aWC( i ) =. ;
          end;
     end;

 t=t+1;
aBMI(t) = bmi;
aWC(t) = wc;

if last.ID then output;
keep ID gender bmi1-bmi3 wc1-wc3;
run;

wide format 결과

 

댓글