본문 바로가기
공부중/1 SAS

SAS 평균값 정리 [PROC TABULATE]

by E__E 2020. 2. 2.

[PROC TABULATE]를 이용해서 변수들의 평균값을 구해보자! 

PROC MEANS를 이용할 수도 있지만, TABULATE로도 구할 수 있어서 차이점을 같이 비교해보겠다. 

[SYNTAX] PROC TABULATE

# 사용 데이터셋: 공공데이터포털(주택도시보증공사_전국 평균 분양가격) 

#설명

 - 데이터셋 변수 구성 : 시도(SIDO), 면적(SIZE), 가격(PRICE), 연도(YEAR), 월(MON)

 - 기간: 2015년 10월 ~2019년 12월

데이터셋 구성

이제 TABULATE를 사용해서 평균값을 구해보자. 

 

 #1. 시도별 평균 분양가격 (1변수) 

proc tabulate data=T.h_price ;  
 var price ; 
 class SIDO;  
 tables SIDO, price*(N MEAN);

run; 

( **MEAN을 쓰지 않으면 시도별 가격의 합계(SUM)가 출력됨. )

    vs

proc means data=t.h_price N MEAN;

 var PRICE; class SIDO;

run; 

 

N을 안쓰고 MEAN만 쓰면 평균값만 출력됨. 

MEANS 결과의 관측값 수(=255)와 N이 숫자가 다른 이유:

  관측값 수=시도변수의 빈도, N은 PRICE의 관측빈도 이기 때문.

 

 여기까지는 tabulate와 means가 별 차이가 없다. 

 

#2. 시도-연도별 평균 분양가격 (2변수)

proc tabulate data=T.h_price ;  
 var price ; 
 class SIDO YEAR;  
 tables SIDO, YEAR*PRICE*MEAN;

run;   

vs 

 proc means data=T.h_price mean ; var PRICE; class SIDO YEAR; run; 

PROC TABULATE 결과(왼쪽)에서는 시도*연도(2*2) 테이블로 깔끔하게 출력된다. 

PROC MEANS의 결과(오른쪽)는 시도, 연도 순서별 행으로 출력되어 표가 길어지고 한번에 보기가 다소 불편하다. 

 

 #3. 시도-연도-사이즈별 평균 분양가격 (3변수)

proc tabulate data=T.h_price ;  
 var price ; 
 class SIDO YEAR SIZE;  
 tables SIDO*SIZE, YEAR*PRICE*MEAN;

run;   

vs 

proc means data=T.h_price mean ; var PRICE; class SIDO SIZE YEAR; run; 

PROC TABULATE vs PROC MEANS

그룹변수가 많아질수록 TABULATE사용이 더 편리하다. 

그룹화할 변수를 CLASS, TABLE문에 추가하여 조건에 맞는 평균값(SUM등 다른 결과도 출력가능, 여기서는 평균값만 보는것)을 정리할 수 있다. 

 

#4. (응용-조건부 출력)

 "전용면적 60㎡초과 85㎡이하" 인 경우의 시도-연도별 평균 & 데이터 나열 순서로 출력  

 #4-1.

proc tabulate data=T.h_price order=data ;

 title '전용면적 60㎡초과 85㎡이하&지역순서';    
 where SIZE='전용면적 60㎡초과 85㎡이하';    

 var PRICE;
 class SIDO YEAR ;
 tables SIDO, YEAR*PRICE*MEAN;

run;   

 

#4-2.

proc tabulate data=T.h_price ;

 title '전용면적 60㎡초과 85㎡이하&ㄱㄴㄷ순서';    
 where SIZE='전용면적 60㎡초과 85㎡이하';    

 var PRICE;
 class SIDO YEAR ;
 tables SIDO, YEAR*PRICE*MEAN;

run;   

 

4-1 vs 4-2 출력결과 비교

데이터셋의 '시도(SIDO)'변수는 #4-1의 순서로 데이터가 구성되어 있다. (서울-인천-경기-......-제주)

이와 같은 순서로 출력하고 싶을 때는 FREQ=DATA 옵션을 적어주면 왼쪽과 같이 출력된다.  

옵션을 적지 않으면 오른쪽과 같이 출력된다.  

 

원하는 조건에 해당하는 결과만 출력하고 싶을 때는 WHERE문을 사용하면 된다. 

다양한 조건의 여러개의 테이블을 한꺼번에 출력할면 결과창에서 헷갈릴 수 있으므로, 이럴 때에는 각 출력결과의 내용에 해당하는 내용을 TITLE문을 사용해서 '제목'을 만들어주면 한결 편리하다.

 

결과를 보니 역시나 서울이 가장 분양가격이 높고, 전국적으로 매년 집값이 상승하고 있다....  

열심히살자... 

화이팅......