BookmarkSubscribeRSS Feed

[SAS 활용 노하우] Subroutine Module

Started ‎05-31-2022 by
Modified ‎05-31-2022 by
Views 232

 

 

서브루틴 모듈은 여러 행렬을 출력하는 데 사용됩니다.

R에서는 목록을 반환하는 것과 유사합니다.

SAS는 기호 X, Y, A, B는 로컬 기호로 사용자 정의 모듈 외부에서 인식되지 않습니다.

또한, CALL 문을 사용해서 출력 매트릭스에서 모든 기호를 지정할 수 있습니다.

인수 없이 모듈을 생성하면 모듈 생성 외부에 정의된 모든 행렬이 로컬 기호 테이블로 당겨집니다.

아래의 예제 프로그램에서 x와 y를 생성합니다.

인수가 없는 모듈 ADD가 있고 모듈 c 외부에서 정의된 x 더하기 y를 추가하고 있습니다.

서브루틴의 첫 번째 인스턴스이로 CALL 문으로 실행하고 RETURN 문이 없음니다.

# Subroutine Module

 

x = {1 2, 3 4};
y = {5 6, 7 8};
start add;
c = x + y;
finish;
call add;

 

 

서브루틴 모듈은 매트릭스를 반환하지 않고 행렬을 만듭니다.

서브루틴을 생성할 때는 RETURN 문을 사용하지 않습니다.

그리고 할당 문을 사용하여 호출하지 않고 CALL 또는 RUN 문을 사용합니다.

아래 예시는 초기 서브루틴, 즉 IGENE 서브루틴을 보여줍니다.

그리고 CALL 문에서 IGEGINE 서브루틴을 사용하고 있습니다. 우리는 하나의 인수 x를 전달하고 고유값 분해를 나타내는 eval과 evc라는 두 개의 행렬을 만듭니다.

 

 

 

 

x = {1 2,3 4};
call eigen(evals,evecs,x);
print evals evecs;

 

 

둘 이상의 행렬은 함수에서 하나만 반환할 수 있지만 다음을 만들 수 있습니다.

아래의 예시는 서브루틴에서 여러 개로 ADDSUB라는 서브루틴을 만든 것입니다.

출력 행렬에서 인수 x 와 y의 왼쪽에 있고 입력 행렬은 오른쪽 a 와 b에 있습니다.

 

 

# ADDSUB Subroutine

 

 

start addsub(x,y,a,b);
x = a + b;
y = a - b;
finish;

matOne = {1 2, 3 4};
matTwo = {5 6, 7 8};
call addsub(add,sub,matOne,matTwo);

 

 

 

출력 행렬은 모듈 내부의 행렬과 같은 이름으로 생성하고 x는 x에 해당하고 y는 y에 해당합니다.

서브루틴을 호출한 후 생성된 행렬은 ADD와 SUB를 생성하고 matOne과 matTwo에 인수를 전달합니다.

 

Storage Techniques

SAS 데이터 세트를 디스크에 저장하는 것처럼 모듈과 행렬을 나중에 검색할 수 있도록 디스크에 저장할 수도 있습니다.

IML 모듈 및 매트릭스를 저장 및 다시 로드하고, 이후 세션을 위해 작업을 저장하고, 나중에 사용하기 위해 큰 중간 결과를 저장하여 메모리를 절약할 수 있습니다.

SAS/IML 저장소 카탈로그는 SAS 라이브러리에 있는 특수하게 구조화된 SAS 파일입니다.

SAS/IML 카탈로그 에는 행렬 또는 모듈인 항목이 포함됩니다.

행렬을 저장할 때 IML은 행렬 이름, 유형, 차원 및 현재 값을 자동으로 저장합니다.

모듈은 컴파일된 코드의 형태로 저장됩니다.

기본 libref는 초기에 work이고 기본 카탈로그는 imlstor입니다. 따라서 기본 저장소 카탈로그는 work.imlstor라고 합니다. RESET STORAGE 명령을 사용하여 저장소 카탈로그(또는 라이브러리 참조와 카탈로그 모두)를 변경할 수 있습니다. SHOW STORAGE 명령을 사용하여 현재 스토리지 카탈로그의 모든 모듈과 매트릭스를 나열할 수 있습니다.

 

 

RESET STORAGE = <libref.>catalog;

 

 

 

모듈이나 행렬을 저장할 새 카탈로그를 만들려면 RESET STORAGE 문을 사용합니다. 위의 구문을 사용하여 해당 명령문을 라이브러리(작업 또는 다른 라이브러리), 마침표, 카탈로그 이름과 동일하게 설정하면 됩니다.

이 명령문은 카탈로그의 모든 것을 SAS 라이브러리에 있는 특수 구조화된 SAS 파일로 저장합니다.

또한 RESET STORAGE 문을 사용하여 가리키고 있는 기존 카탈로그를 SAS에 알릴 수 있습니다.

카탈로그의 모든 항목을 보려면 해당 행에서 SHOW STORAGE 문을 실행하면 됩니다.

 

 

SHOW STORAGE;

 

 

 

 

 

Call SAS Data Sets and Procedures

SAS 데이터 세트를 사용하여 행렬을 생성하는 방법, SAS 데이터 세트로 행렬을 내보내는 방법, 데이터를 아래에 쌓아 기존 SAS 데이터 세트에 추가합니다.

데이터 세트는 읽기 또는 쓰기 액세스 또는 둘 다에 대해 준비된 데이터 세트입니다. 다음 세 가지 중 하나를 사용할 수 있습니다.

1) USE: 읽기 액세스를 활성화합니다. SAS 데이터 세트를 열고 값을 IML 매트릭스로 읽을 수 있습니다.

2) EDIT: 기존 데이터 세트에 대한 읽기 및 쓰기 액세스를 활성화합니다.

3) CREATE: 읽기 및 쓰기 액세스 권한을 모두 부여합니다. 단순히 새로운 데이터 세트를 생성합니다.

세 개의 문 중 어떤 문을 사용하든 상관 없이 CLOSE 문을 즉시 사용하고 Open 데이터 세트가 닫힙니다. 닫지 않으면 다음 중 하나에 액세스할 수 없습니다.CLOSE 문을 사용하는 것을 잊으면 SAS가 데이터 세트를 닫습니다. QUIT 문을 사용하여 SAS/IML을 종료합니다.

USE 문으로 데이터 세트를 여는 경우에도 수동으로 데이터 세트를 열어 테이블을 볼 수 있습니다.

그러나 EDIT 문으로 데이터 세트를 열면 데이터 테이블을 열고 볼 수 없습니다.

 

 

 

 

 

 

 

 Create a Matrix Using a SAS Data Set

 

 

use class;
read all var {height weight}
where (sex='M') into imlClass;
close class;

 

 

 

SAS 데이터 세트를 사용하여 매트릭스를 만들려면 USE, READ 및 CLOSE 문을 사용합니다.

CLASS라는 데이터 집합 READ 문을 사용하여 데이터를 읽고 Open data set을 다음과 같이 닫습니다.

 

 

 

use class;
read all var {height weight}
where (sex='M') into imlClass;
close class;

 

 

 

 

 # Read Example

 

 

 

READ <range> <VAR operand> <WHERE(expression)>
<INTO name <[ROWNAME=row-name COLNAME=col-name]>>;

 

 

 

 

지정된 범위 내에서 읽고, 모든 관찰에서 읽고, 변수에서만 읽어야 합니다.

VAR 옵션을 사용해서 문자 벡터를 주고 변수들의 높이와 무게를 읽습니다.

CLASS 데이터는 WHERE 옵션을 사용하여 성별이 M과 동일한 관측치를 조건부로 읽습니다.

마지막으로, 우리는 키워드 INTRO를 사용하여 모든 데이터를 IMClass라는 새로운 매트릭스에 생성합니다.

ROWNAME 및 COLNAME 옵션을 사용하여 인쇄될 새 ROWNAME 및 COLNAME 옵션을 만듭니다.

 

 

 

Version history
Last update:
‎05-31-2022 09:53 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