안녕하세요. 이번시간에는 IML을 사용하여 series plot를 그리는 방법에 대해 알아보겠습니다. Series plot은 관측치가 일정한 기준에 따라 변화하는 과정을 나타내는 그래프입니다. 시계열 그래프도 Series plot의 일종으로 변화하는 과정의 기준을 시간으로 정한 그래프입니다.
Graphs in SAS/IML
SAS/IML을 사용하여 행렬로 만들 수 있는 그래프의 종류는 BAR chart(막대그래프), BOX plot(박스플롯), HISTOGRAM(히스토그램), SCATTER plot(산점도), SERIES plot (시리즈 플롯), HEATMAP(히트맵) 등이 있습니다. SAS의 procedure를 IML문 안으로 가져와 사용하고 싶을 때 쓰는 SUBMIT & ENDSUBMIT statement라는 명령문이 있습니다. IML문에서 그래프를 그릴 때 사용되는 서브루틴들도 SUBMIT & ENDSUBMIT문이 쓰여 SAS의 SGPLOT procedure의 기능을 일부 가져오는 것입니다. 그렇기 때문에 서브루틴에 사용되는 옵션도 SGPLOT procedure의 옵션과 기능이 같지만 SGPLOT procedure 모든 기능을 포함하고 있지는 않습니다.
CALL SERIES
IML에서 쓰이는 그래프생성용 서브루틴 중 CALL SERIES문은 series plot을 만드는데 사용됩니다. 오늘은 이 CALL SERIES문으로 series plot을 만드는 방법에 대해 알아보겠습니다. 우선 기본적인 형식은 다음과 같습니다.
Call series(x,y) + options;
x,y에 해당하는 벡터는 각각 x축과 y축에 표시될 값을 가지고 있어야합니다. 각 벡터의 값들이 순서대로 matching되며 개수가 다르더라도 축력은 되지만 남는 원소값들은 생략되어 출력되지 않습니다.
Options
사용되는 옵션들은 다음과 같습니다.
Group=
그룹별로 그래프를 그리고 싶을 때 사용하는 옵션입니다. 그룹을 나눌 수 있는 범주형 데이터가 있는 벡터를 지정하면 됩니다.
Grid=
X축과 Y축에 보조선을 그릴지를 결정하는 옵션입니다. 따로 지정하지 않는다면 보조선이 없이 출력됩니다.
Label=
x축과 y축에 라벨을 추가하는 옵션입니다. 시각화를 하여 다른 사람을 이해시킬 때 상당히 유용한 옵션이라고 생각됩니다.
이렇게 3가지 옵션을 사용하는 예시를 보여드리겠습니다.
우선 Do함수를 이용하여 -2에서 2까지 0.1의 간격으로 41개의 원소를 가지는 행벡터를 만들었습니다. 그 다음 y1은 x에대한 sine값을, y2는 cosine값을 가지도록 만들었고 그룹변수로 사용할 행벡터 g1과 g2를 만들었습니다. 마지막으로 CALL SERIES문을 사용하여 변수 x,y에 대하여 series plot을 그렸습니다. 이때 Group= 함수를 사용하여 g1과 g2를 합친 행벡터 g를 그룹변수로 지정하였고 Grid= 함수를 사용하여 x축에 보조선을 그리고 Label= 함수로 x축과 y축에 각각 ‘독립변수’, ‘종속변수’라는 라벨을 지정하였습니다.
Xvalues= & Yvalues=
각각 x축과 y축에 표시되는 간격을 지정할 때 사용됩니다. 등간격의 원소를 가지는 행렬을 생성하는 do함수나 ‘:’연산자를 쓰는 것이 일반적입니다.
Procopt=
PROC SGPLOT문에 있는 옵션을 사용할 때 쓰는 옵션입니다. SGPLOT문에서 옵션을 사용하는 구문 그대로 따옴표안에 입력하면 됩니다.
Other=
SGPOLT 프로시져에서 쓰이는 명령문들을 가져와 사용할 때 쓰는 옵션입니다.
위에서 만들었던 그래프에 Yvalues= 옵션과 Other= 옵션을 추가하여 보겠습니다.
Other=옵션을 사용하여 SGPLOT procedure 에서 각 값들을 기준선으로 연결하는 기능이 있는 NEEDLE 문을 가져다 사용했고 Yvalues= 옵션과 do함수를 사용하여 y축에 -1에서 1까지 0.2 간격의 표시가 생기게 하였습니다.
Time series plot
Call series 문을 사용하여 시계열 그래프를 그려보겠습니다. 사용할 데이터는 Sashelp.tourism dataset입니다. 우선 dataset을 행렬로 불러오겠습니다.
그래프를 그릴 때 사용할 year, exuk(미국달러에 대한 영국파운드의 환율지수)변수만을 각각 열벡터화 시켰습니다.
날짜 변수로 저장되어 있던 year변수를 정수화 시키기 위해 year함수를 사용하였습니다. Call series문의 Label=옵션을 사용하여 y축에 이해를 돕기 위한 라벨을 달았고 other= 옵션과 needle문을 사용하여 점들과 기준선을 연결하는 보조선을 그렸습니다. 그리고 xvalues= 옵션과 do함수를 사용하여 연도표시가 2년간격으로 표시되게 하였습니다.
마치며
오늘은 CALL SERIES문을 통해 series plot를 그리는 방법에 대해 알아보았습니다. 여러가지 옵션들을 활용하여 Time series plot(시계열 그래프)도 그릴 수 있다는 것을 확인하였습니다. 이를 통해 본 CALL SERIES문은 일정한 기준에 따라 변하는 변수의 패턴이나 추세 등을 파악하는데 활용도가 높을 것 같습니다.
Reference
http://support.sas.com/documentation/cdl/en/grstatproc/62603/HTML/default/viewer.htm#sgplot-stmt.htm
Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.