* 부제
: 전체 데이터셋에 summary 정보 붙이기
: Merging a Single Observation with All Observations
* 개요.
: 간혹, summary 성 정보를 구해서, 전체 데이터셋에 재 적용해야 할 필요가 있을 때가 있습니다. (각 섹션별 쿼리 비율 구하기 등)
그럴 때 코딩 편의와 효율을 따질 수 있는 Tip 소개합니다.
* 결론 (추천 방안)
: 소요 시간은 Macro를 쓰나, set문을 2번 쓰나 큰 차이 없습니다만, 아무래도 set문을 2번 쓰는 쪽이 코딩량도 적어서 편리합니다.
1. 원본 데이터셋 : 각 section별 쿼리 수가 붙어 있습니다.
section | qcnt |
AAA1 | 100 |
AAA2 | 200 |
AAA3 | 300 |
AAA4 | 400 |
AAA5 | 500 |
AAA6 | 600 |
AAA7 | 700 |
AAA8 | 1323 |
AAA9 | 2323 |
BBB1 | 34534 |
BBB2 | 235 |
BBB3 | 12424 |
BBB4 | 1355 |
2. 총 쿼리수 구하기.
/* qcnt_sum 구하기 */
proc means data=qcnt noprint;
var qcnt;
output out=qcnt_sum(drop=_freq_ _type_) sum(qcnt)=qcnt_sum;
run;
qcnt_sum |
54994 |
3. 전체 데이터셋에 summary 정보 붙이기.
/* 옳은 방법 1 : macro 사용 */
data _null_;
set qcnt_sum;
call symput('qcnt_sum',qcnt_sum);
run;
data qcnt_rate1;
set qcnt;
qcnt_sum="&qcnt_sum";
qcnt_rate=round(qcnt/&qcnt_sum,0.0001);
run;
section | qcnt | qcnt_sum | qcnt_rate |
AAA1 | 100 | 54994 | 0.0018 |
AAA2 | 200 | 54994 | 0.0036 |
AAA3 | 300 | 54994 | 0.0055 |
AAA4 | 400 | 54994 | 0.0073 |
AAA5 | 500 | 54994 | 0.0091 |
AAA6 | 600 | 54994 | 0.0109 |
AAA7 | 700 | 54994 | 0.0127 |
AAA8 | 1323 | 54994 | 0.0241 |
AAA9 | 2323 | 54994 | 0.0422 |
BBB1 | 34534 | 54994 | 0.628 |
BBB2 | 235 | 54994 | 0.0043 |
BBB3 | 12424 | 54994 | 0.2259 |
BBB4 | 1355 | 54994 | 0.0246 |
/* 옳은 방법 2 : set문 2번 쓰기 */
data qcnt_rate2;
set qcnt;
if _n_=1 then set qcnt_sum;
qcnt_rate=round(qcnt/qcnt_sum,0.0001);
run;
section | qcnt | qcnt_sum | qcnt_rate |
AAA1 | 100 | 54994 | 0.0018 |
AAA2 | 200 | 54994 | 0.0036 |
AAA3 | 300 | 54994 | 0.0055 |
AAA4 | 400 | 54994 | 0.0073 |
AAA5 | 500 | 54994 | 0.0091 |
AAA6 | 600 | 54994 | 0.0109 |
AAA7 | 700 | 54994 | 0.0127 |
AAA8 | 1323 | 54994 | 0.0241 |
AAA9 | 2323 | 54994 | 0.0422 |
BBB1 | 34534 | 54994 | 0.628 |
BBB2 | 235 | 54994 | 0.0043 |
BBB3 | 12424 | 54994 | 0.2259 |
BBB4 | 1355 | 54994 | 0.0246 |
/* 잘못된 방법 : merge 사용 */
data qcnt_rate3;
merge qcnt
qcnt_sum;
qcnt_rate=round(qcnt/qcnt_sum,0.0001);
run;
section | qcnt | qcnt_sum | qcnt_rate |
AAA1 | 100 | 54994 | 0.0018 |
AAA2 | 200 | . | . |
AAA3 | 300 | . | . |
AAA4 | 400 | . | . |
AAA5 | 500 | . | . |
AAA6 | 600 | . | . |
AAA7 | 700 | . | . |
AAA8 | 1323 | . | . |
AAA9 | 2323 | . | . |
BBB1 | 34534 | . | . |
BBB2 | 235 | . | . |
BBB3 | 12424 | . | . |
BBB4 | 1355 | . | . |
'일 > Data Mining' 카테고리의 다른 글
도스 개행문자 (0D 0A = CR LF) 포함된 텍스트 excel로 export 하기. (0) | 2008.07.09 |
---|---|
map & reduced model (0) | 2008.06.02 |
[SAS tip] SAS 데이터셋 생성시 compress 옵션 사용. (0) | 2008.03.17 |
[강의록] Data Mining : Concepts and Techniques , 2nd ed. (0) | 2008.02.22 |
[SAS tip] sas datetime value를 yyyymmddhhmmss 형식으로 변형하기. (0) | 2008.01.22 |