3.1 Defining and Calling a Macro
안녕하세요^^
오늘은 매크로의 정의와 간단한 매크로를 실행시켜보도록 하겠습니다.
매크로 프로그램은 다음과 같은 기본 코드로 작성할 수 있습니다.
1) 매크로 정의
%MACRO macro-name; Macro-text; %MEND ; |
Macro-name이나 macro-text는 다음과 같을 수 있습니다.
- 텍스트 문장
- SAS 문장이나 SAS STEP
- 매크로 참조 변수
- 매크로문, 수식 등
- 위의 사항의 조합들
단, 매크로 문장이나 함수의 이름(LET/ SCAN 등)을 매크로의 이름으로 사용할 수 없습니다.
MCOMPILENOTE=ALL 옵션은 매크로가 정의된 후에 SAS 로그창에 정의를 남겨주는 옵션입니다.
일반적으로 사용되는 옵션의 형태는 다음과 같습니다.
OPTIONS MCOMPLIENOTE=ALL | NONE; |
MCOMPILENOTE의 default는 NONE입니다.
예를들어, 아래의 코드를 보며 MCOMPLIENOTE 문장의 차이를 비교해봅시다.
default값인 MCOMPILENOTE=NONE; 옵션으로 문장을 실행하면,
SAS 로그창에 아무런 내용 없이 결과를 보여줍니다.
그에 비해, MCOMPILENOTE=ALL; 옵션으로 문장을 실행하면,
SAS 로그창에 매크로 정의가 기록되며 같은 결과를 보여줍니다
2) 매크로 저장
매크로의 저장은 default로 work라이브러리의 sasmacr로 일시적으로 저장됩니다.
따라서 위의 매크로를 실행시킨 후 아래와 같은 프로시저를 실행시킨다면 다음과 같은 결과를 얻을 수 있습니다.
즉, work 라이브러리에 있는 sasmacr로 catalog 프로시저를 실행시킵니다.
결과는 sasmacr에 저장된 매크로의 이름과 생성일, 수정일이 함께 기록됩니다.
3) 매크로 선언
매크로 선언의 기본적인 코드는 다음과 같습니다.
%macro--name; |
매크로의 이름 앞에 퍼센트(%)를 붙여서 매크로를 선언합니다.
매크로 변수의 참조처럼 프로그램의 어디에서나 사용될 수 있습니다.
TIME 매크로를 선언해 보겠습니다.
앞서 말씀드린 것처럼 매크로 이름 앞에 %를 붙여 매크로를 선언합니다.
로그창을 살펴보면 %TIME 매크로의 결과를 볼 수 있습니다.
4) 간단한 매크로
Proc means 프로시저를 실행하는 간단한 매크로를 작성해보도록 하겠습니다.
Proc means 프로시저를 실행하는 매크로로 %stats를 let문으로 선언하여
min(최솟값), max(최댓값)을 결과로 가져오는 매크로를 작성하였습니다.
그 결과, weight 변수에 대해 최솟값과 최댓값을 결과로 얻게 되었습니다.
MPRINT 옵션은 SAS 로그창에 매크로 실행 시 매크로 실행 문장이 작성되는 옵션입니다.
MPRINT와 NOMPRINT 옵션의 일반적인 코드의 구성은 다음과 같습니다.
OPTIONS MPRINT; OPTIONS NOMPRINT; |
Default 값은 nomprint입니다.
Mprint 옵션을 사용한 예제를 살펴보겠습니다.
앞서 실행시켰던 calc 매크로를 mprint 옵션을 사용하여 실행시켜보겠습니다.
그 결과는 로그창을 살펴보면 알 수 있습니다.
Proc means 프로시저의 내용이 mprint에 작성된 것을 볼 수 있습니다.
이상으로 매크로의 정의와 선언, 간단한 매크로에 대해 알아보았습니다.
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.