BookmarkSubscribeRSS Feed

[SAS 활용 노하우] Creating Macro Programs

Started ‎04-30-2022 by
Modified ‎04-30-2022 by
Views 2,336

 

이번 게시글에서는 SAS 코드를 반복적으로 실행하기 위해 매크로 프로그램을 생성하는 방법에 대해 알아봅니다.

매크로 프로그램은 SAS DATA 또는 PROC 단계를 통해서 코드를 반복적으로 실행할 수 있습니다.

아래 예시는 R에서 매크로 프로그램을 만들고 하나의 매개 변수로 전달합니다.

정규 분포에서의 관측치의 수입니다. 그런 다음 해당 데이터 세트를 사용하여 보고서를 생성합니다.

이 모든 것을 하나의 프로그램 안에서 생성할 수 있습니다.

이제 R 함수를 한 번 입력하면 함수를 사용하여 원하는 매개 변수를 전달할 수 있습니다.

 

 

image (1).png

 

 

매크로 기능은 다음과 같은 특징이 있습니다.

  • SAS 코드 내에서 기호 대체. 예를 들어 매크로 변수 또는 매개변수를 전달할 수 있습니다.
  • SAS 코드 자동 생성. 감독되지 않은 스크립트를 실행할 수 있습니다.
  • SAS 코드의 조건부 구성. 에 따라 특정 코드, 플롯 또는 보고서를 생성할 수 있습니다.
  • 매크로를 전달하는 매개변수가 무엇이든 상관없습니다.

 

 

 

 

 

Defining a Marco

실제로 매크로를 만드는 아래와 같습니다.

아래과 같이 %MACRO를 사용하여 시작하고 %MEND를 사용하여 종료합니다.

 

%MACRO macro-name;
   macro-text
%MEND <macro-name>;

%MACRO문을 사용하여 지정합니다. %MACRO ~ %MEND가 프로그래밍 문이 됩니다.

 

%macro today;
   %put Today is &sysday &sysdate9;
%mend;

 

 

이 프로그램에서 우리는 %put을 가지고 있습니다. %put은 로그에 메시지를 씁니다.

 

Calling a Macro

매크로가 컴파일된 후 매크로는 sasmacr이라는 이름으로 Work 라이브러리에 저장됩니다. 매크로를 호출하려면 변수를 사용하면 다음 구문과 같이 매크로 이름에 백분율 기호를 붙이기만 하면 됩니다.

 

 

%macro-name

 

위에서 생성한 today 매크로를 호출하기 위해서는 아래와 같이 호출할 수 있습니다.

 

 

%today

 

 

 

매크로 내에서 %PUT 문을 실행할 것입니다. 따라서 그것은 생성 오늘 날짜 메시지를 기록합니다.

매크로 호출은 코드의 모든 위치에 나타날 수 있습니다. DATA 또는 PROC 단계에 있을 필요는 없습니다.

매크로 프로세서에 전달되어 매크로 내부의 명령문을 실행할 수 있습니다.

매크로를 호출한 후에는 세미콜론을 사용할 필요가 없습니다.

 

 

Customizing with Parameter Lists

매개변수 목록은 매크로 내에서 참조되는 매크로 변수 목록입니다.

매개변수 목록에는 세 가지 유형이 있습니다.

1. positional – 해당 매개 변수 이름과 동일한 순서로 표시되어야 합니다.

2. 키워드 – 등호 뒤에 기본값 할당

3. 혼합 – 위치 매개 변수와 키워드 매개 변수가 모두 있습니다.

R에서와 마찬가지로 매개변수 목록을 매크로에 전달하여 프로그램을 더욱 맞춤화할 수 있습니다.

그리고 R에서와 마찬가지로, 위치 키워드 또는 이러한 매개변수 목록을 혼합하여 사용할 수 있습니다.

R에서는 매개변수의 정확한 이름을 모를 수 있습니다.

 

 

 

 

 Positional Parameters

 

 

%macro calc(dsn,vars);
proc means data=&dsn;
var &vars;
run;
%mend calc;
%calc(business,yield)

 

 

 

 

위의 예시는 calc라는 매크로를 만들고 있습니다.

두 가지 위치 매개변수가 있습니다. 데이터 세트 이름의 DSN은 쉼표로 구분되고 var는 VAR 문에 넣을 변수입니다.

매개변수를 전달할 때 매크로 변수인 것처럼 전달합니다.

우리는 MEANS 절차에서 DSN 및 vars에 앰퍼샌드를 고정하고 있습니다.

%calc를 사용하여 매크로를 호출할 때 단순히 데이터 세트 이름(이 경우 비즈니스)과 변수(이 경우에는 yield)를 나열합니다.

매개변수 값은 해당 매개변수 이름과 동일한 순서로 나타나야 합니다. 따라서 %calc(비즈니스)의 매크로 호출에서 첫 번째 인수는 매크로 정의의 첫 번째 매개변수(이 경우 DSN)와 일치해야 합니다.

yield 변수는 vars에 해당해야 합니다.

 

 

 

 Keyword Parametes

 

 

%macro count(opts=,start=01jan08,stop=31dec08);
      proc freq data=orion.orders;
         where order_date between
            "&start" and "&stop";
         table order_type / &opts;
         title1 "Orders from &start to &stop";
      run;
%mend count;

 

 

키워드 매개변수에는 등호 뒤에 기본값이 할당됩니다. 위의 예시에서는 FREQ 프로시저인 count라는 매크로 프로그램을 만들고 있습니다.

세 가지 키워드 매개 변수가 있습니다. 옵션은 null 값과 같으며 시작은 다음과 같습니다.

2008년 1월 1일, 그리고 2008년 12월 31일과 동일하게 정지합니다. FREQ 절차에서, 그 날짜들을 사용합니다. 조건을 제공할 WHERE 문과 슬래시(/)를 사용하여 TABLE 문에서 옵션을 사용합니다.

키워드 매개 변수로 사용됩니다. 따라서 세 가지 모수 모두 기본값이 있습니다.

 

 

 

 

 

Mixed Parameters

혼합 매개변수 목록에는 위치 매개변수와 키워드 매개변수가 모두 있습니다. 

매크로 정의에서 위치 매개변수를 먼저 나열한 다음 키워드 매개변수를 나열합니다.

 

%macro count(opts,start=01jan08,stop=31dec08);     1.
proc freq data=orion.orders;
where order_date between
"&start" and "&stop";
table order_type / &opts;
title1 "Orders from &start to &stop";
run;
%mend count;
options mprint;
%count(nocum) 2. 
%count(stop=30jun08,start=01apr08) 3.
%count(nocum nopercent,stop=30jun08)   4.
%count()   5. 

 

 

 

 

위의 예제에서는 매크로 호출에 대해서 값은 true를 가집니다.

1. %MACRO 문에서 opts는 positional 매개변수입니다. start와 stop은 키워드 매개변수로 남겨둡니다.

2. %count의 첫 번째 매크로 호출에서 우리는 위치 매개변수 opts를 nocum으로만 변경하고 있습니다. 시작하고 stop 키워드 매개변수는 기본값이 됩니다.

3. 두 번째 매크로 호출에서 stop 및 start 키워드 매개변수를 두 개의 다른 날짜로 변경합니다.

위치 매개변수 opts에 대해 아무 것도 지정하지 않았습니다. 우리가 변경하지 않으면 위치 매개변수, 기본값은 null 값입니다.

4. 세 번째 매크로 호출에서 opts 위치 매개변수와 stop 키워드를 모두 변경했습니다.

매개변수. 이것은 중요하다. 위치 매개변수가 먼저 와야 합니다. 그래서 우리는 선택을 변경해야합니다

nocum 및 nopercent를 입력한 다음 키워드 매개변수를 변경할 수 있습니다. 이 경우에는 stop입니다.

5. 최종 매크로 호출에서 null 값으로 실행합니다. opts는 기본적으로 null 값을 사용합니다. 그리고 둘 다 stop 키워드 매개변수는 기본값으로 유지됩니다.

 

 

Version history
Last update:
‎04-30-2022 12:49 AM
Updated by:
Contributors

sas-innovate-white.png

Special offer for SAS Communities members

Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.

 

View the full agenda.

Register now!

Article Labels
Article Tags