반응형
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 을 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;
'의학통계 > SAS Tip' 카테고리의 다른 글
SAS의 Data step의 Set문장 이용하여 Match 여부 처리하는 방법 (0) | 2022.07.11 |
---|---|
SAS에서 Index 만드는 3가지 방법 (0) | 2022.07.09 |
성능향상을 위한 SAS코딩 Tip (0) | 2022.06.30 |
SAS에서 중복된 데이터 제거하기 (0) | 2022.06.23 |
Univariate 를 이용하여 percentile 구하기 (0) | 2022.06.23 |
댓글