[2-3] MACRO Variable References
안녕하세요^^
오늘은 매크로 변수 참조에 대해 알아보도록 하겠습니다.
[매크로 변수의 references]
1. “&” 이후에 매크로 변수의 이름이 따라 나옵니다.
2. 프로그램의 어디에서나 나올 수 있습니다.
3. Case sensitive하지 않습니다.
4. Symbolic references라고도 불립니다.
5. Macro triggers에 해당합니다.
6. 매크로 프로세스를 통해 진행됩니다.
매크로 프로세스에서는 매크로 변수를 symbol table에서 찾고, 매크로 변수의 값을 대체하며, symbol table에서 매크로 변수를 찾지 못하면 sas log창에 warning을 합니다.
예를들어. 확장편집기에 다음과 같은 코드를 작성 하여,
<Substitution within SAS Code>에 대해 알아보도록 하겠습니다.
아래의 코드를 실행시켜 봅시다. 그러면, 다음과 같은 결과를 얻을 수 있습니다.
Symbol table에 있는 &sysday는
해당하는 시스템의 요일로
‘수요일(Wednesday)’의 값을 갖고 있기 때문에
“Today is Wednesday”라는 결과를 얻게 되는 것입니다.
또한 다른 예제를 살펴보겠습니다.
Data는 sashelp 라이브러리에 있는 heart 데이터를 이용하도록 하겠습니다.
Heart 데이터의 status 변수로 freq 프로시저를 실행시켜보도록 하겠습니다.
또한 footnote를 추가해보도록 하겠습니다.
먼저 사용할 데이터를 set문을 사용하여 가져오도록 하겠습니다.
결과적으로 Single 인용마크(‘, ‘)를 word scanner는 토큰화하지 못합니다.
따라서 single 인용마크가 아닌 duble 인용마크(“, “)를 사용하면, word scanner는 문자열을 토큰화하여 결과를 보여주게 됩니다
특히, &systime은 프로그램을 실행시킨 시간을, &sysday는 프로그램을 실행시킨 요일을, &sysdate9.은 프로그램을 실행시킨 날짜를 보여줍니다.
또한, &sysuserid는 id를 보여주고, &sysscpl은 시스템의 버전별로 값을 다르게 나타내 줍니다.
이제 proc print를 사용하여 데이터를 print해보도록 하겠습니다.
위의 결과는 결과의 일부만을 가져온 것입니다.
이렇게 &syslast를 이용하면, 가장 최근에 만들어진 data set을 data로 가져오게 됩니다.
또한, title로 &syslast를 사용하면 data set의 이름을 title로 가져오게 됩니다.
이 때, single 인용마크가 아닌 double 인용마크를 사용하는 것을 주의해야 합니다.
<Unresloved Reference>에 대해 알아보도록 하겠습니다.
다음과 같은 코드를 실행시키면,
매크로 프로세스는 warnign 메시지를 보여줍니다.
&Death를 매크로 변수로 인식하여 값을 가져오려 하지만,
&Death에 해당하는 변수 값이 없기 때문에 변수를 가져올 수 없고, warning 메시지를 보여주게 됩니다.
또한 존재하지 않는 매크로 변수를 데이터로 참조하게 되면,
위와 같이 존재하지 않는 데이터라는 error 메시지와 함께 현재 스텝의 실행을 중지하는 결과를 얻게 됩니다.
이상, 매크로 변수의 참조에 대해 알아보았습니다.
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.