사이트맵  |  Contact Us
 
홈 > SAS Tech & Tip > SAS Programming 활용하기
[SAS 프로그래밍] SAS/IML(interactive matrix language)로 간단한 행렬만들기 2018.02.05
김효범 551 0
http://www.mysas.co.kr/sas_tiptech/a_question.asp?b_no=7605&cmd=content&bd_no=5

 

 

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

 

 

 

 Creating Matrix

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

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

 

 

 

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

 

 

 

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

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

 

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

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

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

 

 

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

 

 

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

 

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

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

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

 

 

 

마치며

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

 

 

 

Reference

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

 

 

 

 
 
 
휴대폰 번호
휴대폰 인증번호
 
 [SAS 프로그래밍] SAS/IML(interactive matrix language)로 행렬 연산하는 방법
 [Mixed Model 1.5.2] Introduction to the Theory of General Linear Mixed Models