BookmarkSubscribeRSS Feed

[SAS 프로그래밍] SAS/IML(interactive matrix language)로 SAS dataset을 행렬로 저장하는 방법

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

안녕하세요오늘은 IML을 사용하여 SAS dataset 을 행렬화 하는 방법에 대해 알아 보겠습니다.

 

 

 

 Open & Read a dataset

SAS dataset을 행렬로 불러오기 위해서는 우선 IML USE statement가 필요합니다명령문에 사용되는 기본포맷은 다음과 같습니다.

 
다운로드 - 2020-06-18T131919.276.jpg

 

우선 불러올 SAS dataset을 지정합니다그리고 뒤에 오는 옵션들은 필요에 따라 선택적으로 쓰일 수 있습니다. VAR옵션의 경우 dataset에서 가져올 변수를 지정하는 역할을 합니다. WHERE옵션은 조건을 생성하여 조건에 만족하는 관측값만을 골라서 불러오는 역할을 합니다마지막으로 NOBS옵션은 불러오는 dataset의 관측값들의 전체 개수를 저장하고 싶을 때 개수를 저장할 변수를 따로 지정하는 역할을 합니다그리고 SAS dataset을 지정할 때 DATA단계에서 쓰이는 dataset 옵션을 똑같이 사용하여 불러올 dataset의 변수를 선택 또는 제거관측치의 시작 또는 끝 지점 등을 지정할 수도 있습니다.

 

 

USE statement로 사용할 데이터셋을 지정하는 단계를 마친 후에는 READ statement 를 사용하여 행렬로 저장해야 합니다기본 포맷은 다음과 같습니다.

 

다운로드 - 2020-06-18T131920.563.jpg

READ statement 바로 뒤에는 dataset에서 읽을 관측개체의 범위를 지정할 수 있습니다. ALL, CURRENT, NEXT, POINT 등을 사용할 수 있는데 일반적으로 모든 개체를 읽는 ALL을 사용합니다.

 

다운로드 - 2020-06-18T131921.724.jpg

 

다운로드 - 2020-06-18T131922.842.jpg

 

경우에 따라 특정한 개체의 번호를 지정하여 원하는 개체만을 읽어낼 때는 POINT옵션을 사용하면 됩니다.

 

다운로드 - 2020-06-18T131924.394.jpg

 

다운로드 - 2020-06-18T131925.650.jpg

 

그리고 범위지정을 생략하게 되면 CURRENT로 지정하는 것과 같이 현재 개체를 읽게 되는데 만약 dataset open 하여 처음 read하는 경우에는 첫번째 개체가 읽히게 되고 이전에 읽힌 기록이 있는 경우는 마지막에 읽힌 개체를 읽게 되는 것입니다.

 

다운로드 - 2020-06-18T131926.907.jpg

 

다운로드 - 2020-06-18T131928.307.jpg

 

행렬 a, c의 경우 read문에서 똑같이 range를 생략하였지만 a의 경우 이전에 dataset read한 적이 없기 때문에 첫번째 개체를 read하였지만 c의 경우는 바로 앞서 range all로 지정하여 모든 개체를 읽은 기록 때문에 마지막 개체를 읽은 것입니다이외에도 NEXT AFTER등의 옵션단어 등을 사용하여 개체의 range를 지정할 수 있습니다.

 

VAR옵션은 USE statement에서와 마찬가지로 읽을 변수를 지정하는 역할을 합니다중괄호 안에 원하는 변수명을 직접 입력할 수도 있고

 

 다운로드 - 2020-06-18T131929.810.jpg

 

다운로드 - 2020-06-18T131931.444.jpg

 

_NUM_, _CHAR_등의 표현을 사용하여 숫자변수 혹은 문자변수만을 골라서 읽어 들일 수도 있습니다.

 

다운로드 - 2020-06-18T131933.075.jpg

 

다운로드 - 2020-06-18T131934.522.jpg

 

만약 생략하게 될 경우 모든 변수를 읽는 _ALL_과 같이 작용하게 됩니다.

 

다운로드 - 2020-06-18T131936.299.jpg

 

다운로드 - 2020-06-18T131937.328.jpg

 

다운로드 - 2020-06-18T131938.732.jpg

 

WHERE 옵션은 지정된 조건을 만족하는 개체만을 읽는 역할을 합니다VAR 옵션 과 WHERE 옵션은 USE문과 READ문에 공통으로 있고 기능도 같기 때문에 두 명령문 중에 한군데만 사용해도 됩니다.

 

다운로드 - 2020-06-18T131939.907.jpg

 

다운로드 - 2020-06-18T131941.444.jpg

 

다운로드 - 2020-06-18T131942.730.jpg

 

INTO옵션은 읽은 변수들을 하나의 행렬로 묶어서 저장하는 역할을 합니다. INTO옵션을 사용하지 않는다면 dataset에서 읽은 개체들은 변수별로 각각 다른 열벡터로 저장됩니다. INTO 옵션을 사용하여 저장될 행렬명을 지정해주면 VAR, WHERE 옵션을 통해 읽힌 개체들이 각각의 열벡터로 저장되는 것이 아닌 하나의 행렬로 저장됩니다하지만 숫자 열벡터와 문자 열벡터는 하나의 행렬로 묶을 수 없습니다만약 VAR옵션이 생략된 상태에서 INTO옵션을 사용하게 될 경우 VAR 옵션을 통해 숫자변수(_NUM_ )만을 읽는 것과 마찬가지로 dataset에서 숫자변수만을 행렬에 저장하여 숫자행렬이 생성 됩니다문자변수를 행렬로 만들고 싶다면 VAR옵션을 사용하여 문자변수(_CHAR_)만을 읽는 조건을 걸어 주어야 합니다.

 

다운로드 - 2020-06-18T131944.411.jpg

 

다운로드 - 2020-06-18T131945.659.jpg

 

INTO옵션에는 저장되는 행렬의 행명칭과 열명칭도 지정할 수 있는 기능이 있습니다. INTO+행렬명 다음 대괄호 안에 ROWNAME 또는 COLNAME을 추가하여 행명칭과 열명칭을 지정할 수도 있습니다. Rowname의 경우 저장되는 행렬의 행의 수와 같은 열벡터 즉, nxp 크기의 행렬을 저장할 경우에는 nx1 크기의 열벡터 혹은 변수를 지정하여 행명칭을 부여할 수 있고 colname의 경우 varnames를 사용하면 변수명을 그대로 열명칭으로 지정할 수 있습니다.

 

다운로드 - 2020-06-18T131947.546.png

 

다운로드 - 2020-06-18T131948.962.png

 

마치며

오늘은 use문과 read문을 사용하여 sas dataset을 사용하여 행렬을 만드는 방법에 대해 알아 보았습니다다음시간에는 반대로 행렬로 존재하는 data sas dataset으로 변환하여 저장하는 방법에 대해 알아보겠습니다.

 

 

 

Reference

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

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

 

 

 

 

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