포스팅 목차
o SASFILE 구문
1. 목 적
SASFILE 구문은 SAS 데이터 세트를 열고, 메모리에 충분한 버퍼를 할당하여 전체 파일을 로드한 후 메모리 내에서 파일을 유지한 상태로 데이터를 처리한다.
파일을 읽어서 데이터를 메모리에 유지한 이후에 아래 항목이 나올 때까지 SASFILE 구문 이후의 DATA와 PROC 스텝 또는 어플리케이션 등 에서 사용된다.
- 다른 SASFILE 구문이 파일을 닫고 버퍼를 해제
- 프로그램 종료로 인하여 자동으로 파일을 닫고 버퍼를 해제
SASFILE 구문을 사용하면 다음과 같은 방법으로 성능을 향상 시킨다.
- SAS 데이터 세트 처리를 위하여 다수의 읽기/쓰기 작업(버퍼에 대한 메모리 할당과 해제 포함)을 한 차례 작업으로 줄인다.
- 메모리에 데이터를 유지하여 I/O 처리를 줄인다.
SAS 프로그램이 데이터 스텝에서 동일한 SAS 데이터 세트를 여러 번 읽어야 할 필요가 있고, 충분한 양의 메모리를 소유하고 있어서 전체 파일이 실제 메모리에 유지될 수 있는 경우에 SASFILE 구문을 사용하면 유용하다. 그런, 대부분의 성능 개선 작업과 마찬가지로 사용자 환경에서 SASFILE 구문을 포함하거나 미포함하는 경우에 대하여 반복 작업을 통하여 효율적인 운영 방안을 위한 성능 측정을 하는 것이 좋다.
2. 문 법
SASFILE member-name<.member-type>< (password-option(s))> OPEN | LOAD | CLOSE ; |
1) libref
SAS 라이브러리를 참조하는 라이브러리 참조자(libref)를 지정한다. libref(라이브러리 참조자)의 이름은 유효한 SAS 이름을 사용해야 한다. 기본 라이브러리 참조자는 User(USER가 할당된 경우) 또는 WOKR (USER가 할당되지 않은 경우)이다.
제한사항 : | 라이브러리 참조자는 순차적 출력형식의 라이브러리가 포함된 SAS 라이브러리 결합을 사용 할 수 없다. |
2) member-name
라이브러리 참조자가 지정된 SAS 라이브러리에 존재하는 SAS 데이터 파일(멤버 유형 DATA로 지정된 SAS 데이터 파일)의 이름을 지정한다
제한사항 : | SAS 데이터 세트는 V7, V8, V9 Base SAS 엔진 |
3) member-type
사용하기 위하여 열리는 SAS 파일의 유형을 지정한다. 기본적으로 유효한 값은 DATA이다.
4) password-option(s)
SASFILE 구문이 실행된 경우에 SAS는 파일이 읽기 암호로 보호되었는지 여부를 확인한다. 파일이 읽기 암호로 보호되어 있으면, SASFILE 구문에서 READ= 암호를 사용해야 하고, 파일이 쓰기 암호 또는 수정 암호로 보호되어 있으면 WRITE=, ALTER= 또는 PW= 암호를 사용해야 한다. 그러나 파일은 입력(읽기) 형식으로 열린다. 이후의 처리를 위하여 프로그램에서 필요한 암호를 개별적으로 다시 지정해야 한다.
다음 중에서 하나 이상의 암호 옵션을 지정한다.
(1) READ=password
SASFILE 구문은 읽기 암호를 사용하여 보호되어 있는 파일을 열 수 있다.
(2) WRITE=password
SASFILE 구문은 읽기 암호와 쓰기 암호로 보호되어 있는 파일을 열기 위하여 쓰기 암호를 사용한다.
(3) ALTER=password
SASFILE 구문은 읽기 암호와 수정 암호로 보호되어 있는 파일을 열기 위하여 수정 암호를 사용한다.
(4) PW=password
SASFILE 구문은 다양한 수준(읽기, 쓰기, 수정)의 암호로 보호되어 있는 파일을 열기 위하여 PW 암호를 사용할 수 있다.
Tip : | SASFILE 구문이 실행된 경우에 SAS는 파일이 읽기 암호로 보호되었는지 여부를 확인한다. 파일이 읽기 암호로 보호되어 있으면, SASFILE 구문에서 READ= 암호를 사용해야 한다. 파일이 쓰기 암호 또는 수정 암호로 보호되어 있으면, WRITE=, ALTER= 또는 PW= 암호를 사용하라. 그러나, 파일은 입력(읽기) 형식으로 열린다. 이후의 처리를 위하여 프로그램에서 필요한 암호를 개별적으로 다시 지정해야 한다. |
참고 : | 예제2 : SASFILE 구문에서 암호 지정하기 |
5) OPEN
파일을 열고 버퍼를 할당한다. 그러나, 프로시져, SAS 구문 또는 어플리케이션이 실행되는 시점에 메모리에 데이터를 읽는다.
6) LOAD
파일을 열어서 버퍼를 할당하고 메모리에 데이터를 읽는다.
참고 : | 할당된 버퍼의 총 개수가 데이터 세트 페이지와 인덱스 파일 페이지의 수를 기반하여 계산된 필요한 버퍼의 개수보다 적다면, SAS는 얼마나 많은 페이지를 메모리에 읽었는지 알려주는 경고 메시지를 발행한다. |
7) CLOSE
버퍼를 해제하고 파일을 닫는다.
3. 범 주
SAS 기본 구문 (프로그램 제어 구문)
4. 상세 설명
일반 정보
SASFILE 구문은 SAS 데이터 세트를 열고, 메모리에 전체 파일을 유지하기 위하여 충분한 버퍼를 할당한다. 파일을 읽어서 데이터를 메모리에 유지한 이후에 아래 항목이 나올 때까지 SASFILE 구문 이후의 DATA 와 PROC 스텝 또는 어플리케이션에서 사용된다.
- 다른 SASFILE 구문이 파일을 닫고 버퍼를 해제
- 프로그램 종료로 인하여 자동적으로 파일을 닫고 버퍼를 해제
SASFILE 구문을 사용하여 다음과 같이 성능을 향상 시킨다.
- SAS 데이터 세트 처리를 위하여 다수의 읽기/쓰기 작업(버퍼에 대한 메모리 할당과 해제 포함)을 한 차례 작업으로 줄인다.
- 메모리에 데이터를 유지하여 I/O 처리를 줄인다.
SAS프로그램이 데이터 스텝에서 동일한 SAS 데이터 세트를 여러 번 읽어야 할 필요가 있고, 충분한 양의 메모리를 소유하고 있어서 전체 파일이 실제 메모리에 유지 될 수 있는 경우에 SASFILE 구문을 사용해야 유용하다. SASFILE은 SAS/SHARE 서버와 같은 SAS 서버를 구동하는 프로그램에 사용되는 경우에 특히 유용하다. 그러나, 대부분의 성능 개선 작업과 마찬가지로, 사용자 환경에서 SASFILE 구문을 포함하거나 제거하는 등의 반복 작업을 통하여 효율적인 운영 방안을 위한 성능 측정을 제안한다.
SASFILE 구문을 사용하여 열려진 SAS 데이터 세트 처리
SASFILE 구문이 실행되면 SAS는 지정한 파일을 연다. 그 이후의 DATA와 PROC 스텝이 실행되는 경우에 각각의 요청에 대하여 파일을 반복하여 열 필요가 없다. 파일은 그 이후의 다른 SASFILE 구문이 파일을 닫거나 프로그램 또는 세션이 종료될 때까지 열린 상태로 유지된다.
SAS 데이터 세트가 SASFILE 구문을 사용하여서 열린 경우에 파일은 입력 처리를 위하여 열리고, 그 이후에 입력 또는 갱신 처리를 위하여 사용 될 수 있다. 그러나, Utility 와 출력 처리는 파일에 배타적(단독) 접근을 요구하기 때문에 파일은 그 이후의 utility 또는 출력(OUTPUT) 처리에 사용 될 수 없다. 예를 들어, 파일 대체 작업 또는 변수 이름에 대한 변경 작업을 수행 할 수 없다.
다음 테이블은 일부 SAS 프로시져와 SAS 구문의 목록을 제공하고, SASFILE 구문에 의하여 파일이 열리면 사용가능한지 여부를 작성한다.
[SASFILE 구문에 의해 열린 파일에 대한 처리 요청]
처리 요청 내용 | Open 모드 | 허용 여부 |
APPEND 프로시져 | update | Yes |
파일을 생성 하거나 대체하는 데이터 스텝 | output | No |
변수의 이름 변경 또는 변수 추가, 라벨의 추가 또는 변경, 무결성 조건 또는 인덱스의 추가 또는 제거를 하기 위한 DATASETS 프로시져 | utility | No |
AGE, CHANGE, 또는 DELETE 구문을 사용하는 DATASETS 프로시져 | 파일을 열지 않지만 배타적(단독) 접근을 요구한다. | No |
FSEDIT 프로시져 | update | Yes |
PRINT 프로시져 | input | Yes |
정렬된 데이터 세트로 원래의 데이터 세트를 교체하는 SORT 프로시져 | output | No |
관측치 갱신, 추가, 삭제하기 위한 SQL 프로시져 | update | Yes |
CREATE TABLE 또는 CREATE VIEW 구문을 사용하는 SQL 프로시져 | output | No |
무결성 조건 또는 인덱스를 생성하거나 제거하기 위한 SQL 프로시져 | utility | No |
버퍼 할당
버퍼는 데이터를 처리하는 동안에 데이터의 일부분을 유지하기 위한 메모리 영역이다. 할당되는 버퍼의 수는 한 번에 메모리에서 유지 될 수 있는 데이터 양에 따라 결정된다.
버퍼의 수는 SAS파일의 영구적인 속성은 아니다. 단지 현재 세션 또는 현재 작업이 실행되는 동안에 유효하다. SAS 파일이 열릴 때에 파일을 처리하기 위한 기본적인 버퍼의 개수가 설정된다. 기본 버퍼의 개수는 운영 환경에 의존하지만, 일반적으로 1개의 버퍼처럼 작은 개수가 설정된다. 버퍼의 개수를 사용자 임의로 설정하기 위하여 BUFNO= 데이터 세트 옵션 또는 시스템 옵션을 사용 할 수 있다.
SASFILE 구문이 실행되는 경우에 SAS는 자동적으로 데이터 세트 페이지와 인덱스 파일 페이지(인덱스 파일 존재하는 경우)의 개수에 따라 버퍼의 개수를 할당한다. 예를 들어:
- 데이터 세트 페이지의 수가 5이고 인덱스 파일이 존재하지 않으면, SAS는 5개의 버퍼를 할당한다.
- 데이터 세트 페이지의 수가 500이고 인덱스 파일 페이지수가 200이면, SAS는 700 개 버퍼를 할당한다.
메모리에 유지되고 있는 파일을 처리하는 동안에 메모리에 유지되고 있는 파일 크기가 증가하면, 파일을 수용하기 위하여 할당되는 버퍼의 개수가 증가한다. 이런 경우에 SASFILE이 SAS 데이터 세트에 대하여 실행이 되면, BUFNO=옵션은 무시된다.
I/O 처리
일반적으로 I/O(입력/출력) 작업은 디스크와 같은 저장 장치에서 데이터 일부를 읽어서 메모리에 데이터를 전송하거나, 반대로 메모리에서 데이터를 읽어서 저장 장치에 작성한다. SASFILE 구문을 사용하여 SAS 데이터 세트가 열린 경우에는 데이터를 한번 메모리에 읽어서 유지한 상태로 사용한다. 이에 따라서 데이터 처리를 위한 I/O 요청 횟수가 감소한다.
경고 : | 메모리가 충분하게 존재하는 경우에 실제적으로 I/O 처리가 줄어 들 수 있다. SAS 데이터 세트가 매우 크면, 메모리의 양이 전체 파일을 유지하기 위하여 충분하지 못 할 수 있다. 메모리가 부족하면, 운영 환경은 가상 메모리를 활용하여 실제로 존재하는 메모리 보다 더 큰 크기를 활용 할 수 있다. 가상 메모리가 발생하는 경우에 데이터 접근 I/O 작업은 성능 향상이 안되는 스와핑(swapping) I/O 작업으로 전환된다. 부가적으로, SAS와 운영 환경 양쪽에서 할당 될 수 있는 메모리의 최대 양을 소유하고 있는 경우에, 프로그램에서 실제로 필요한 메모리의 양이 사용 가능한 최대 메모리의 양을 초과하여 사용 될 수 있다. 프로그램에서 필요한 메모리의 양이 사용 가능한 메모리의 양을 초과하면, 할당되어 있는 메모리를 해제하기 위하여 할당된 버퍼의 개수가 기본 할당값으로 감소 될 수도 있다. |
Tip : | SAS 데이터 세트가 필요로 하는 메모리의 양을 예측하기 위하여, 페이지(Page) 크기, 데이터 세트 페이지 개수, 인덱스 파일 크기, 인덱스 파일 페이지의 개수 등을 확인하기 위하여, 파일에 대하여 CONTENTS 프로시져를 실행하라. |
5. 비교 사항
- 특정 버퍼의 수를 지정하기 위하여 BUFNO= 시스템 옵션 또는 데이터 세트 옵션을 사용하라.
6. 참고 옵션
- BUFNO= 데이터 세트 옵션
- BUFNO= 시스템 옵션
7. 예 제
예제1 : 여러 단계를 처리하는 프로그램에서 SASFILE 사용하기
다음 SAS 프로그램은 SAS 데이터 세트를 열어서 메모리에 데이터를 전송하고, 메모리에 데이터를 유지한 상태로 여러 스텝에서 데이터를 사용하는 프로세스에 대한 예제이다. 다음 프로그램은 파일을 여러 번 읽는 데이터 스텝으로 구성된다.
SAS Statements |
libname mydata 'SAS-library'; sasfile mydata.census.data open; 1 data test1; set mydata.census; 2 run; data test2; set mydata.census; 3 run; proc summary data=mydata.census print; 4 run; data mydata.census; 5 modify mydata.census; . . (statements to modify data) . run; sasfile mydata.census close; 6 |
1. 데이터 세트 MYDATA.CENSUS를 열어서, 데이터 세트 페이지와 인덱스 파일 페이지의 개수에 따라 일정 개수의 버퍼를 할당한다.
2. MYDATA.CENSUS의 모든 페이지를 읽고 모든 데이터를 디스크에서 메모리로 전송한다.
3. 두 번째로 MYDATA.CENSUS를 다시 읽지만, 추가적인 I/O 발생되지 않는다.
4. 세 번째로 추가적인 I/O 발생 없이 다시 메모리에서 MYDATA.CENSUS를 읽는다.
5. 네 번째 추가적인 I/O 발생 없이 메모리에서 다시 MYDATA.CENSUS 데이터를 읽는다. MODIFY 구문이 메모리에서 성공적으로 데이터를 변경하면, 변경된 데이터는 데이터 스텝의 끝에서 메모리에서 디스크로 전송된다.
6. MYDATA.CENSUS 데이터 세트를 닫고, 할당된 버퍼를 해제한다
예제2 : SASFILE 구문에서 암호 지정하기.
다음 SAS 프로그램은 SASFILE 구문 사용 방법과 읽기 암호와 수정 암호로 보호되어 있는 SAS 데이터 파일에 대하여 암호를 지정하는 방법을 설명한다.
SAS Statements |
libname mydata 'SAS-data-data-library'; sasfile mydata.census (read=gizmo) open; 1 proc print data=mydata.census (read=gizmo); 2 run; data mydata.census; modify mydata.census (alter=luke); 3 . . (statements to modify data) . run; |
1. SASFILE 구문에 파일을 열기 위한 읽기 암호를 지정한다.
2. PRINT 프로시져에서 읽기 암호는 다시 지정되어야 한다.
3. 데이터 세트가 갱신되어야 하기 때문에 수정 암호가 MODIFY 구문에서 사용된다.
참고 : | 위 예제에서는 읽기 암호 대신 상위 수준의 수정 암호를 사용하는 것이 가능하다. |
[SAS Statement] SAS 데이터 스텝 구문 사전 목록] |
SAS 함수(SAS Function) 리스트 링크 |
'SAS > SAS 구문사전' 카테고리의 다른 글
【SAS Statement】 SET 구문 (0) | 2022.02.05 |
---|---|
【SAS Statement】 SELECT 구문 (0) | 2022.02.05 |
[SAS Statement] RUN 구문 (0) | 2022.02.05 |
【SAS Statement】 RETURN 구문 (0) | 2022.02.05 |
【SAS Statement】 RETAIN 구문 (0) | 2022.02.05 |
댓글