BookmarkSubscribeRSS Feed

[SAS 활용 노하우] SG procedure - SGPLOT

Started ‎10-13-2021 by
Modified ‎10-13-2021 by
Views 1,101

 

 

SG procedure는 Statistical Graphics Procedure로 복잡한 통계적인 그래프를 쉽게 생성하여 분석 결과의 내용을 시작적으로 파악할 수 있는 프로시저입니다.

SG 프로시저는 그래프를 시각적으로 나타내기 위한 코딩을 최소화하고 통계적인 분석에 중점을 두고 있습니다. 또한, 프로시저를 이용한 그래프는 정확한 정보 해석과 비교가 가능하도록 간결하게 생성됩니다.

 

SG Procedure는 아래와 같이 4개의 프로시저가 제공되며 기본적으로 그림형식(.png)으로 제공합니다.

 

1. SGPLOT : 한 장의 도표에 하나의 축을 기준으로 다양한 그래프를 겹쳐서 나타낼 수 있다.

2. SGPANEL : 하나 이상의 범주형 변수에 대한 패널을 생성하고, 각 셀에 여러 가지 형태의 도표를 겹쳐서 나타낼 수 있다.

3. SGSCATTER : 산점도의 형태를 패널로 생성하며, 세 가지 형태의 레이아웃을 제공합니다.

4. SGRENDER : 유틸리티 프로시저로서 (GTL, Graph Template Languate)로 작성된 템플릿으로부터 그래프를 생성한다.

 

그 중 이 게시글은 SGPLOT 프로시저에 관한 글 입니다.

 

 

                                                                                                                                                        

 

 

SGPLOT

 

SGPLOT 프로시저는 다양한 형태의 그래프를 겹쳐서 하나의 도표(Single-cell)로 나타나며 제공하는 그래프의 종류와 예시는 아래와 같습니다.

 

- 기본적인 도표: 산점도, 추세선, 구간도표, 바늘도표, 벡터도표

- 적합 곡선과 신뢰구간을 나타내는 도표: 국소 회귀곡선, 회귀곡선, Penalized B-Spline 곡선, 타원

- 분포를 나타내는 도표: 히스토그램, 박스플롯, 분포곡선

- 범주를 나나태는 도표: 막대도표, 점도표

 

일반적인 SGPLOT 프로시저 사용형식은 다음과 같고, 그리고자 하는 도표의 종류에 따라 SGPLOT 프로시저 아래에 있는 명령문들을 선택해서 사용하면 됩니다.

 

 

PROC SGPLOT DATA = SAS-data-set <options>;
     SCATTER X=Variabel Y=variable </options>;
     HBOX response-variable </option(s)>;
     SERIES X=variable Y=variable </option(s)>;
     HISTOGRAM response-variable </options>;
     DENSITY response-variable </options>;
     KEYLEGEND <"name-1" ... "name-n"> </option(s)>;
     VBAR category-variable </options>;
     VLINE category-variable </options>;
     LOESS X=numeric-variable Y=numeric-variable </options>;
RUN;

 

이 외에도 ELIPSE, HBAR, NLINE, NEEDLE, PBSPLINE, REG, VBOX, VECTOR 등의 명령문이 있습니다.

 

다양한 데이터를 이용해 SGPLOT 사용 예시를 알아보겠습니다.

 

 

 

1. 산점도: SCATTER 명령문

 

산점도를 그리기 위해서 SCATTER 명령문을 사용하면됩니다.

SCATTER 명령문에서 제공되는 여러 가지가 있는데, 자주 이용되는 옵션들을 살펴보면 아래와 같습니다.

 

■ GROUP = 변수: 그룹별로 산점도를 나타낸다.

■ GROUPDISPLAY = CLUSTER | OVERLAY : 그룹을 군집별로 나타내거나 겹처서 나타낸다.

■ CLUSTERWIDTH = 간격: 군집 사이의 간격을 나타낸다.

 

SCATTER 명령문의 사용 예를 SASHELP 라이브러리에 있는 rehub2 데이터를 사용하겠습니다.

rehub2 데이터는 72개의 variables와 4개의 변수들로 구성되어 있습니다. 아래는 rehub2 데이터를 일부입니다.

 

스크린샷_2021-10-13_오후_5.32.10.png

 

 

proc sgplot data = sashelp.revhub2;
scatter x = hub Y=revenue /
GROUP= type GROUPDISPLAY= CLUSTER CLUSTERWIDTH=0.7;
Xaxis TYPE=Discrete;
RUN;

 

 

스크린샷_2021-10-13_오후_5.30.31 (1).png

 

 

 

GROUP = type 변수로 지정하여 그룹별로 Revenue 값을 산점도를 나타내었습니다.

GROUPDSPLAY = CLUSTER는 산점도를 군집별로 나타내라는 것이고 CLUSTERWIDTH = 0.7은 군집들의 간격을 0.7로 나타내라는 의미입니다.

또한, X 축에 놓일 변수가 이산형일 경우에는 XAXIS TYPE = DISCRETE 라고 지정합니다. 축에 높일 변수의 속성에 따라 TYPE = DISCRETE | LINEAR | LOG | TIME으로 지정할 수 있습니다.

 

 

 

2. 수평박스플롯 : HBOX

 

수평박스플롯은 데이터의 분포를 표현하며, HBOX 명령문을 이용합니다.

데이터는 sashelp에 있는 heart 데이터를 사용합니다.

비만도를 나타내는 weight_status 변수 (normal, overweight, underweight)별로 콜레스테롤 수치를 나타내는 수평박스플롯을 확인할 수 있습니다.

 

proc sgplot data = sashelp.heart;
title 'Cholesterol distribution by weight class';
hbox cholesterol / category=weight_status;
run;

 

 

스크린샷_2021-10-14_오전_9.51.33.png

 

 

 

 

 

3. 추세선 : SERIES

 

데이터의 추세선을 파악하기 위해서는 SERIES 명령문을 사용합니다.

사용 데이터는 sashelp에 있는 elerctric 데이터를 사용했습니다. 데이터를 호출하고 WHERE 명령문을 이용하여 2001년부터 customer = Residential에 대한 추세를 파악하도록 지정하였습니다. 또한, 옵션으로 DATALABEL을 지정하면 각 변수에 대한 데이터 포인트마다 해당 값을 표시하며, Y2AXIS를 설정하면 보조축이 생깁니다.

 

 

proc sgplot data= sashelp.electric(WHERE=(year >=2001 and customer="Residential"));
xaxis type=discrete;
series x=year y=coal / datalabel;
series x=year y=naturalgas /datalabel y2axis;
run;

 

 스크린샷_2021-10-14_오전_10.15.16.png

 

 

 

 

4. 히스토그램 : HISTOGRAM

 

연속형 변수의 분포는 히스토그램을 통해 알 수 있는데, HISTOGRAM 명령문을 사용합니다. 콜레스테롤의 히스토그램에 DENSITY 명령문을 사용하여 히스토그램과 분포함수가 결합된 형태로 나타났습니다.

또한 DENSITY 명령문에 TYPE = KERNEL의 옵션을 지정하면 커널함수(kernel function)까지 결합되어 나타납니다. TYPE = NORMAL | KERNEL 옵션을 지정하면 분포함수의 형태를 지정할 수 있습니다. 여기서는 LOCATION = INSIDE 와 POSITION = TOPRIGHT 옵션을 지정하여 범례가 그래프의 안쪽이며, 오른쪽 상단에 위치하도록 설정하였습니다.

 

 

Proc sgplot data= sashelp.heart;
title 'Cholesterol Distribution';
HISTOGRAM cholesterol;
DENSITY cholesterol;
DENSITY cholesterol / TYPE=kernel;
KEYLEGEND / LOCATION = INSIDE POSITION = TOPRIGHT;
RUN;

 

 

스크린샷_2021-10-14_오전_10.37.13.png

 

 

 

 

5. 수직막대 그래프 : VABR

 

수직막대 그래프를 그리기 위해서는 VBAR 명령문을 사용합니다.

사용데이터는 sashelp에 있는 stocks 데이터를 사용하였습니다. WHERE 명령문을 사용하여 2000년 2월 한 달간, IBM 주식에 대해서 수직막대 그래프를 나타내었습니다. 여기서 RESPONSE = volume 옵션을 지정하여 날짜에 따라른 주식의 volume을 나타내었고, VLINE 명령문과 RESPONSE = close 옵션을 이용하여 날짜에 따른 주식의 종가(close)를 꺽은선 그래프로 수직막대 그래프로 수직막대 그래프와 겹쳐서 나타냈습니다. 또한, Y2AXIS를 지정하여 보조축을 설정하였습니다.

 

 

proc sgplot data = sashelp.stocks(where= (date >= "01jan2000"d
			and date <= "01jan2001"d and stock = "IBM"));
title "Stock Volume VS. Close";
VBAR date / RESPONSE=volume;
Vline date / RESPONSE=close Y2AXIS;
run;

 

 

 스크린샷_2021-10-14_오전_11.18.21.png

 

 

Version history
Last update:
‎10-13-2021 10:27 PM
Updated by:
Contributors

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

Article Labels
Article Tags