지난 글에서는 PROC FCMP에 대한 선언에 대해서 알아보았습니다.
이번 글에서는 PROC FCMP 선언 후에 실제 함수를 호출하고 결과값을 출력하는 방법에 대해 알아보겠습니다.
1. PROC FCMP 를 선언
PROC FCMP OUTLIB=work.functions.subR;
subroutine circle(radius, area, circum);
outargs area, circum;
area = 3.14 * radius ** 2;
circum = 3.14 * 2 * radius;
ENDSUB;
quit;
함수를 PROC FCMP 를 선언하고 OUTLIB 영역에 저장하게 되면, 해당 함수를 실행하기 위해 검색할 위치를 알려주어야 합니다.
2. 검색할 위치 탐색
options cmplib=work.functions;
검색할 위치를 알려 주는 구문이 위와 같이 사용합니다.
OPTIONS 는 SAS의 실행 환경을 설정하는 명령어로 앞으로 SAS를 어떤 방식으로 동작시킬지 설정하는 명령어입니다.
CMPLIB는 Compiled Library 의 약자로 검색할 위치를 알려주는 옵션입니다.
만약, CMPLIB으로 검색할 위치를 알려주지 않는다면 오류가 발생합니다. CMPLIB은 독립적인 구문이 아니고 OPTIONS 구문 안에서 CMPLIB을 선언해야 사용할 수 있습니다.
SAS에서 제공하는 기본적인 함수 SUM(), SCAN(), UPCASE() 등의 경우 OPTIONS CMPLIB 구문으로 검색할 위치를 알려주지 않아도 되지만, 사용자가 직접 정의한 함수라면 CMPLIB 구문으로 지정된 함수를 검색해야합니다.
3. 서브루틴 호출
data test;
radius = 5;
area = .;
circum = .;
call circle(radius, area, circum);
run;
test 라는 데이터셋으로 데이터셋을 생성해서 서브루틴으로 호출한 결과를 test 데이터셋에 저장하게 됩니다.
radius(반지름)은 5로 설정하고, area와 circum은 결측값으로 먼저 선언한 후, radius에 5를 대입하여 계산된 원의 넓이와 둘레를 각각 저장합니다.
4. 결과 출력
실제 결과를 출력하는 구문입니다.
proc print data=test;
run;
Hi @AmeeKang ,
One observation about:
options cmplib=work.functions;
Better/"securer" approach is to use the APPEND option, for example
options append=(cmplib=work.functions);
So that if the cmplib is already defined earlier it won't be overwritten but it will be updated.
Nearly 200 sessions are now available on demand in the Innovate Hub.
Watch Now →