BookmarkSubscribeRSS Feed

[SAS 프로그래밍] SAS/IML(interactive matrix language)로 행렬을 데이터셋으로 만드는 방법

Started ‎06-18-2020 by
Modified ‎06-18-2020 by
Views 189

 

 

 안녕하세요이번시간에는 IML을 통해 행렬을 SAS dataset으로 바꾸는 방법을 알아보겠습니다.

 

 

 

 사용되는 명령문은 Create, Append, Close 세가지입니다우선 예시로 쓰일 행렬을 만들고 시작하겠습니다.

 

gHEV89rywB5rUAAAAASUVORK5CYII_.png

 

jJMSQXXNbSc0R2rqu5Q2QWT82Wvwfx8qQWn4MsrOAtfXsHSsvU36szrWZN_kqxfELv8XfcB2XHrpIIdBeihFFSQCtC8NaggFaB5a.png

3x3크기의 행렬 a, 3x2크기의 행렬 b, 3x1크기의 행렬 c를 만들고 이 행렬들을 이용해 sas dataset을 만들어보겠습니다.

 

 

 

 

 

 

 

 Create dataset

 

IML로 행렬을 데이터셋으로 변환할 때가장 먼저 쓰이는 명령문은 Create문 입니다. Create문의 역할은 만들어질 dataset의 위치와 이름을 지정하고 재료로 쓰이는 행렬에서 필요한 열벡터의 이름즉 새로 만들어질 dataset의 변수들을 결정하게 됩니다기본적인 형식은 다음과 같습니다.

 

 _ygkMVEav3P9f2T3Kkx3KWVqf477a5Ej0K7cz_z4kAVZGQ4LiYkyACbwsAVZGL8uXrTMBJjAkAQ5GQ4LiYkyACbwsAQ5GL8uXrTM.png

 

 Create문은 두가지 형식으로 사용될 수 있는데두 가지 형식 모두 Create문 뒤에 공통적으로 만들어질 dataset의 위치와 이름을 먼저 지정하고 시작합니다첫번째 형식은 Var절을 사용합니다. Var절 뒤에는 사용될 행렬을 나열합니다이때 행렬들은 모두 열벡터로 취급이 되고 각 행렬명이 변수명이 됩니다예를 들어 3x3행렬을 Var절 뒤에 놓게 되면 9x1크기의 열벡터로 취급 됩니다좀 더 이해를 돕기 위해 행렬 a, b, c를 Var절 뒤에 놓고 dataset을 만들어보겠습니다.

 

utwaPAP9BpDWFQH963Jr8Owv_Cil4xbhGdcAAAAASUVORK5CYII_.png

 

wH26xKZINyCzwAAAABJRU5ErkJggg__.png

 각 행렬명이 변수명으로 지정되었고 열벡터가 아닌 행렬이 열벡터로 바뀌어 3x3 크기의 행렬 a 3x2 크기의 행렬 b가 각각 9x1, 6x1 크기의 열벡터로 바뀌어 각각 해당하는 변수의 값으로 들어갔습니다이때 열벡터의 크기가 가장 큰 a의 행수 9만큼 관측치의 개수가 지정 되었고 이를 만족하지 못하는 변수에는 결측치가 생깁니다.

 

 

 

 

 

 두번째 형식은 하나의 행렬을 그대로 데이터셋화 시키는 방법입니다. From절 뒤에 사용할 행렬을 지정하고 그 뒤에는 변수명을 지정하는 옵션이 따라옵니다변수명을 지정하는 옵션 colname에는 변수의 개수에 알맞은 문자행렬이나 문자열을 지정해주면 됩니다. 3x3크기의 a행렬을 dataset으로 만들고 임의로 변수명을 지정해보겠습니다.

 

 Fipy7eLiiPSMIgJptUdi6Jm6DDL1GQwCTjqNFBPZUI4BMXA0ZOoyGAEg8WkRgTzUCIHE1ZOgwGgIg8WgRgT3VCPiTuGpuv9pedAA.png

 

P6u8JI1y93u8AAAAAElFTkSuQmCC.png

 

행렬 a가 행렬var의 문자값들을 변수로 갖는 dataset이 된 것을 확인하였습니다.

 

 

 

 

 

 

 

 Add observations

 

Create명령문 다음으로 Append명령문을 사용해야합니다. Append명령문의 역할은 Create명령문으로 만들어진 dataset의 구조에 관측치들을 추가하는 것입니다, Create문은 뼈대를 만드는 역할이고 Append문이 살을 채우는 역할로 이해하면 됩니다기본적인 형식은 다음과 같습니다.

 

6xF7on9CzLYAAAAASUVORK5CYII_.png

 

기본적인 형식은 Create문과 같습니다두형식의 차이는, Var절은 두명령문에 모두 사용될 필요가 없지만 From의 경우 Create문에서 사용되면 Append문에도 사용되어야 합니다그리고 같은 Var절을 사용하더라도 Create문에서 사용될 때와 Append문에서 사용될 때의 결과가 다릅니다. Create문에 사용될 행렬을 지정해주지 않으면 기존에 만들어진 행렬 모두가 자동으로 지정이 되기 때문에 행렬의 수만큼 변수의 개수가 지정됩니다다음은 이해를 돕기 위해 실습한 결과입니다.

 

v8B6kMcq3qiNqEAAAAASUVORK5CYII_.png

 

BYaHxNHeZjrBAAAAAElFTkSuQmCC.png

 

 

=================================

 

 

xyKaxIADYHAAAAABJRU5ErkJggg__.png

 

gX5W0KVAyCN3QAAAABJRU5ErkJggg__.png

Temp3 데이터셋의 경우, Create문에서 Var절을 사용하여 변수의 개수를 지정하여 지정된 개수만큼만 변수가 생성되었지만 Temp4 데이터셋의 경우는 Create문이 아닌 Append문에 Var절을 사용하였기 때문에 이미 Create문에서 이미 모든 행렬의 개수만큼 변수가 생성되어 Var절에서 지정된 것보다 많은 변수가 생성되고 지정되지않은 행렬에 해당하는 변수는 모든 관측값이 결측으로 나타났습니다.

 

 

 

 

 

 

 

 Close dataset

 

행렬을 dataset으로 만드는 마지막 단계는 Close명령문을 사용하여 작업을 완료하는 것입니다. Close명령문 뒤에는 앞서 Use명령문 또는 Create명령문으로 열어 놓았던 dataset을 닫아주는 역할을 합니다.

 

 

 

 

 

 

 

 마치며

 

이번시간에는 IML Create, Append, Close명령문으로 행렬을 데이터셋화 하는 방법에 대해 알아보았습니다저번시간에 다뤘던 데이터셋의 행렬화와 같이 데이터셋과 행렬의 상호작용이 가능하게 하는 방법인 것 같습니다.

 

 

 

Reference

 

http://support.sas.com/documentation/cdl/en/imlug/67502/HTML/default/viewer.htm#imlug_langref_sect08...

 

http://support.sas.com/documentation/cdl/en/imlug/67502/HTML/default/viewer.htm#imlug_langref_sect05...

 

http://support.sas.com/documentation/cdl/en/imlug/67502/HTML/default/viewer.htm#imlug_langref_sect07...

Version history
Last update:
‎06-18-2020 01:26 AM
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