BookmarkSubscribeRSS Feed

[SAS 프로그래밍] SAS/IML(interactive matrix language)로 간단한 행렬만들기

Started ‎06-18-2020 by
Modified ‎06-18-2020 by
Views 1,973

안녕하세요이번시간에는 SAS에서 제공하는 행렬 프로그래밍 언어인 IML에 대해 알아 보겠습니다. IML이란 “interactive matrix language”대화형 행렬언어로 행렬을 만들고 조작할 수 있는 행렬 언어입니다기본적으로 SAS data 단계와 유사하지만 적용되는 기본단위가 data단계는 개체이고 IML의 기본단위는 행렬이라는 점에 차이가 있습니다. IML을 사용하는 전용 소프트웨어인 SAS/IML Studio가 따로 있지만 procedure문을 사용하면 SAS base에서도 가용합니다.

 

 

 

 Creating Matrix

 

우선 행렬을 만드는 법에 대해 알아보겠습니다. Proc IML문에서 행렬을 만들 때 행은 쉼표(,)로 열은 공백으로 구분을 하여 중괄호 안에 값들을 배열하면 됩니다예를 들어 1행에는 1, 2, 3 2행에는 4, 5, 6이 순서대로 있는 2x3짜리 행렬은 다음과 같이 만들 수 있습니다.

 

다운로드 - 2020-06-18T115624.581.png

 

다운로드 - 2020-06-18T115625.757.png

 

참고로, proc IML문에서는 자동으로 결과가 출력되지 않기 때문에 결과를 행렬을 확인하기 위해선 print문을 따로 사용해야 합니다.

 

 숫자로 된 행렬뿐만 아니라 문자로 된 행렬도 만들 수가 있는데 방법은 SAS data단계와 비슷하게 원하는 값을 따옴표안에 넣으면 됩니다숫자행렬과 마찬가지로 2x3 크기의 문자행렬은 다음과 같이 만들 수 있습니다.

 

다운로드 - 2020-06-18T115626.974.png

 

다운로드 - 2020-06-18T115628.189.png

 

 J함수와 repeat함수를 이용하면 반복되는 값들을 행과 열의 크기만 지정해주어 보다 쉽게 행렬생성이 가능해집니다. J함수의 경우 함수 뒤에 오는 소괄호에 차례로 (행의 크기, 열의 크기, 반복될 값)를 지정하여 넣어주면 일정한 값으로 이루어진 행렬이 만들어지게 됩니다. 예를 들어 j(3, 3, 1) 함수문을 사용하면 3x3크기의 모든값이 1인 행렬이 만들어집니다.

 

다운로드 - 2020-06-18T115629.485.png

 

다운로드 - 2020-06-18T115630.861.png

 

그리고 J함수와 비슷한 repeat함수도 있습니다. Repeat 함수에는 뒤에 오는 소괄호에 차례로(지정한 행렬, 행의 배수, 열의 배수)를 입력하면 지정한 행렬이 행과 열의 배수만큼 커지게 됩니다. 예를 들어 방금 위에서 j함수로 만든 행렬을 repeat함수로 6x9짜리 행렬로 만들어 보겠습니다.

 

다운로드 - 2020-06-18T115632.284.png

 

다운로드 - 2020-06-18T115633.685.png

 

6x9짜리 행렬이 만들어 진 것을 각행과 열을 세어보면 확인할 수 있습니다. 하지만 행과열의 수가 커질 수로 행과 열의 수를 정확히 세는 것은 어려워집니다. 이때는 행과 열을 세어주는 함수를 사용하면 해결됩니다. 먼저 nrow함수는 행의 수를 나타내는 함수입니다. 그리고 ncol은 열의 수를 나타내는 함수입니다.

 

다운로드 - 2020-06-18T115635.557.png

 

다운로드 - 2020-06-18T115637.093.png

 

그리고 이 두 함수를 한꺼번에 사용하는 함수는 dimension 함수입니다.

 

다운로드 - 2020-06-18T115638.477.png

 

다운로드 - 2020-06-18T115639.845.png

 

행렬이 의도한대로 6x9크기로 만들어 진 것을 확인하였습니다.

 

 Shape 함수는 행렬의 모양을 바꾸는 함수입니다함수 뒤에 오는 소괄호에 차례로 (행렬행의 크기열의 크기)를 지정해주면 원하는 크기의 행렬로 바뀌게 됩니다예를 들어 위에서 만들었던 2x3문자행렬을 3x2행렬로 바꿔보겠습니다.

 

다운로드 - 2020-06-18T115641.477.png

 

다운로드 - 2020-06-18T115642.925.png

 

만약에 원래 행렬의 데이터 수보다 크게 모양을 지정하면 행렬의 데이터가 행, 열 순서대로 반복해서 채워지게 됩니다. 예를 들어 2x3짜리 행렬을 3x4짜리 행렬로 만들면 다음과 같이 모양이 변하는 것을 확인할 수 있습니다.

 

다운로드 - 2020-06-18T115644.508.png

 

다운로드 - 2020-06-18T115646.221.png

 

행렬에 새로운 행이나 열을 추가할 때는 연결 연산자를 사용하면 됩니다. SAS data 단계에서도 쓰이는 ‘||’연결 연산자는 새로운 열을 추가시키는 데 사용합니다.

 

다운로드 - 2020-06-18T115648.045.png

 

다운로드 - 2020-06-18T115649.837.png

 

기존에 있던 x라는 행렬에 새로운 열이 추가된 것을 확인할 수 있습니다. 열이 아닌 행을 추가할 때는 ‘//’연결 연산자를 사용합니다.

 

다운로드 - 2020-06-18T115651.541.png

 

다운로드 - 2020-06-18T115653.420.png

  

행과 열을 추가할 때는 추가되는 행과 열의 크기와 기존의 행과 열의 크기가 각각 같아야 하기 때문에 만약 크기가 다른 행렬을 추가할 경우 함수가 실행되지않습니다.

 

 

 

마치며

 

오늘은 SAS의 행렬 전용 언어인 IML로 간단한 행렬을 만드는 법을 알아봤습니다. IML에서 제공하는 함수를 사용하여 기존의 행렬의 모양을 바꾸거나 새로운 행과 열을 추가해보았습니다. IML에서 쓰이는 언어는 SAS data 단계에서 쓰이는 언어와 비슷하긴 하지만 기본적인 단위가 행렬이기 때문에 행렬을 다루기 편한 장점이 있습니다.

 

 

 

 

Reference

 

https://support.sas.com/resources/papers/proceedings13/144-2013.pdf

 

 

Version history
Last update:
‎06-18-2020 01:09 AM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags