[SAS 프로그래밍] 매크로 언어 – CALL SYMPUT
안녕하세요^^
이번 시간에는 SAS 사용의 효율성을 높여주는 매크로와 관련하여 매크로 언어로 사용되는 CALL SYMPUT macro routine에 대해 알아보도록 하겠습니다.
먼저 CALL SYMPUT은 아래와 같이 정의됩니다.
CALL SYMPUT (“macro-variable”, value);
CALL SYMPUT은 DATA step에서 value에 지정된 값을 macro-variable에 저장한 후, 다른 프로시저나 실행문에서 사용할 수 있도록 해줍니다.
주의할 점은 CALL SYMPUT 사용하여 만든 매크로 변수는 생성하였던 DATA step과 동일한 DATA step에서는 사용될 수 없습니다.
▶ 단일 변수 형태
▷ 먼저 CALL SYMPUT이 가장 간단하게 사용되는 단일 변수 매크로 형태입니다.
▷ coding
DATA step에서 CALL SYMPUT 으로 만들고자 하는 매크로 변수(items, x)를 지정하고 각각 변수에 값을 할당합니다.
매크로 변수를 사용할 때는 “&”문자와 함께 매크로 변수를 입력합니다.
%PUT을 사용하여 매크로 변수를 출력하게 되면 LOG창에 결과가 출력됩니다.
▶ 조건문과 함께 사용
▷ CALL SYMPUT 매크로가 자주 쓰이는 경우 중 하나인 조건문과 함께 사용되는 경우에 대해 알아보겠습니다.
▷ 예제데이터
예제로 사용할 데이터는 상품을 주문한 고객들과 관련된 데이터 입니다.
고객 ID, 주문 날짜, 모델 이름 및 주문 수량이 변수로 입력되어 있습니다.
위의 데이터를 사용하여, 주문을 제일 많이 한 고객을 확인해보도록 하겠습니다.
▷ 활용
▷ coding
PROC SORT : 먼저 데이터를 주문 수량이 가장 많은 순서대로 정렬하였습니다.
DATA step에서 IF 조건문을 사용하여
제일 위에 있는 고객(주문 수량이 제일 많은 고객)의 고객 ID를 biggest라는 매크로 변수에 저장하도록 코딩하였습니다.
PROC PRINT에서 WHERE 문을 사용하여
고객 ID가 biggest에 저장된 ID인 경우만 출력되도록 하였습니다. 즉, 주문 수량이 제일 많은 고객만 출력이 되도록 하였습니다.
이와 함께, Title에도 매크로 변수를 사용하였습니다.
출력된 결과를 확인한 결과, 고객 ID가 287인 고객이 총 4번을 주문하였고, 그 중 DELTA BREEZE 모델을 한번에 30개 주문한 경우가 최다 주문 수량이었습니다.
▶ 데이터로 매크로 변수 및 값 지정하기
▷ 이번에는 DATA step에서 데이터 입력을 할 때, 입력된 변수의 값들을 매크로 변수화 하는 방법에 대해 알아보겠습니다.
▷ coding
예제로 사용할 데이터는 posiotion과 player 두 변수를 갖고 있고 INPUT문과 CARDS를 사용하여 데이터를 입력하였습니다.
CALL SYMPUT(position, player) : 변수 position에 있는 데이터 shortstp, picher, frstbase가 매크로 명이 되고 각각의 매크로 변수에 player이름(Ann, Tom, Bill)이 할당됩니다.
%PUT을 사용하여 매크로 변수들과 할당된 값을 확인 할 수 있습니다.
▷ coding
이번에는 매크로 변수의 이름을 각 관측치로 하지 않고 ‘POS’라는 이름으로 통일시켜 지정해 보도록 하겠습니다.
‘POS’ || left(_n_) : 매크로 변수 이름이 관측치가 입력된 순서대로 POS1, POS2, … 로 생성됩니다.
각 매크로 변수에는 position의 데이터가 할당되도록 하였습니다.
데이터의 행의 개수만큼 매크로 변수가 생성되었으며
POS1 = shortstp
POS2 = pitcher
POS3 = frstbase
로 각각 할당이 되었음을 %PUT을 사용하여 확인하였습니다.
지금까지 매크로 변수로 많이 활용되는 CALL SYMPUT routine에 대해 살펴보았습니다.
감사합니다. ^^
[Reference]
http://www2.sas.com/proceedings/sugi29/243-29.pdf
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002295697.htm
http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000210266.htm
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.