매크로에서의 조건부 매크로는 명령어 앞에 %를 붙이는 것 외 data step 에서 사용되는 IF-THEN-ELSE 와 동일하다.
%IF expression %THEN result-text
%ELSE result-text;
[Example 1] index 매크로변수를 이용하여 "yes" 인 조건일 경우, %data 매크로를 실행시키고, local 매크로 변수인 var1과 var2 를 지정하여 %corr 이라는 매크로를 실행시켜 단순 %IF-%ELSE 조건부 매크로 %condi 를 정의
%MACRO condi(index, var1, var2); %IF &index=yes %THEN %data %corr %MEND condi; %codi(yes, bis, per) %condi(no, bis, bcredit) |
여기서, 조건절에 지정한 Yes, YES 는 서로 다르게 인식하게 된다. 이러한 경우에는 %UPCASE 함수 사용하여 입력되는 사항에 상관없이 대문자로 조건 성립여부를 판단하게끔 통일시키거나 %LOWCASE 함수를 이용하여 소문자로 통일시키는 것이 좋다. (참고. SAS Macro 매크로 함수 %UPCASE, %LOWCASE (tistory.com) )
만일, 위의 매크로에서 %CONDI(YES, bis, per) 을 실행시킨다면, 로그 창에 다음과 같이 매크로 로그 메시지가 나타나게 된다.
SYMBOLGEN: Macro variable INDEX resolves to YES MLOGIC(CONDI): %IF condition &index=yes is FALSE |
[Example 2] 두가지 조건에 대해 다른 data set 을 불러들여 %corr 매크로를 실행시키는 조건부 매크로
%MACRO data1; DATA temp; SET bankdata; IF bis>8; RUN; %MEND data1; %MACRO data2: DATA temp; SET bankdata; IF bis<8; RUN; %MEND data2; %MACRO corr; PROC CORR; VAR &var1 &var2, RUN; %MEND corr; %MACRO condi (index, varl, var2); %IF &index=yes %THEN %DO; TITLE "Corr for BIS>8" %data1 %corr %END; %ELSE %DO; TITLE "Corr for BIS>8" %data2 %corr %END %MEND condi; %condi(yes, bis, per) %condi(no, bis, per) |
두번째 %CONDI 매크로의 경우에는 yes와 no 조건 모두를 정의한 매크로로, 해당 조건에 대한 프로세스는 %DO-%END 문을 이용하여 그룹실행을 나타내었다.
'Biostat > SAS Macro' 카테고리의 다른 글
SAS Macro 매크로 변수 앞에 특정문자 삽입하기 (0) | 2023.10.17 |
---|---|
SAS Macro 반복작업, 일련번호를 갖는 변수 생성 %DO-%END (0) | 2023.10.17 |
SAS Macro 매크로 속의 매크로 (0) | 2023.10.16 |
SAS Macro 매크로 주석 (0) | 2023.10.16 |
SAS Macro 매크로 옵션 (0) | 2023.10.16 |