사이트맵  |  Contact Us
 
홈 > SAS Tech & Tip > SAS Programming
[SAS 프로그래밍] SAS/IML(interactive matrix language)로 행렬을 데이터셋으로 만드는 방법 2018.03.02
김효범 539 0
http://www.mysas.co.kr/sas_tiptech/a_question.asp?b_no=7624&cmd=content&bd_no=5

 

 

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

 

 

 

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

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

 

 

 

 Create dataset

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

          

 

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

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

 

 

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

 

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

 

 

 

 Add observations

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

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

 

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

 

 

 

 Close dataset

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

 

 

 

 마치며

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


 

Reference

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

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

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

 

 

 
 
 
휴대폰 번호
휴대폰 인증번호
 
 [SAS 프로그래밍] SAS/IML 로 SVD(singular value decomposition) 계산해보기
 [Mixed Model 3.1.3] CONTRAST and ESTIMATE Statements