5.3.1 Iterative Processing
안녕하세요^^
오늘은 macro에서의 Iterative Processing에 대해 알아보도록 하겠습니다.
Iterative Processing에서는 매크로 문을 반복적으로 실행하는 방법에 대해 알아보고, 코드를 작성하는 방법에 대해 알아보겠습니다.
매크로문에서 반복문은 %DO문으로 실행할 수 있습니다.
간단한 반복문에서 %DO와 %END문은 매크로 내에서 실행 가능합니다.
Index-variable은 변수의 위치이며, start, stop, increment는 지정해주는 값이며, %BY의 default 값은 1이며 선택적으로 사용 가능합니다.
예제를 통해서 더욱 자세히 알아보도록 하겠습니다.
======================================================================
앞선 5.2와 관련된 내용에서 다룬 예제를 사용하였습니다.
Proc sql문을 사용하여 학생들의 이름을 list1~list100000으로 저장합니다.
numrows라는 매크로 변수를 지정하는데, sql문에 사용된 데이터의 obs문의 개수가 저장됩니다.
매크로 반복문을 사용하여 1부터 numrows까지 ‘name* is 학생이름’으로 출력하는 매크로 문장을 작성하였습니다.
오른쪽의 결과를 살펴보시면, name1 is 알프레드, name2 is 앨리스, …, name19 is 윌리엄 이라는 19개의 결과가 출력된 것을 보실 수 있습니다.
======================================================================
두번째 예제를 통해 반복적인 매크로문의 사용에 대해 더 알아보도록 하겠습니다.
라이브러리 내에 있는 데이터셋을 프린트하는 매크로를 작성해보도록 하겠습니다.
Sashelp라이브러리 내에 ‘vstabvw’라는 파일에는 각각의 라이브러리에 있는 데이터셋 이름과 라이브러리, 위치를 보여주는 데이터셋입니다.
출력창을 보면, “SASHELP’에 존재하는 데이터셋의 이름을 보여주고 있습니다.
다음으로, 작성한 매크로문을 보면,
%let lib=&upcase(&lib); 는 매크로변수 &lib에 작성된 문자를 대문자로 바꾸어 lib에 저장하는 문장입니다.
where문에서 libname이 &lib인 것으로 조건을 주었기 때문에, 앞서 대문자로 바뀐 lib에 해당하는 문자만을 갖는 데이터로 한정됩니다.
if문장에서 변수 totaldsn에 마지막 _n_을 저장하였고,
반복문인 %do 문장에서 1부터 totaldsn에 해당하는 데이터 수만큼 proc print문을 obs=5만큼 실행합니다.
그 결과 로그창에 proc print가 실행되었다는 결과가 작성되고, 결과창에 각각의 데이터의 obs 5개에 해당하는 값들이 출력되는 것을 확인하실 수 있습니다.
이상으로 Iterative Processing 첫 번째 시간으로 반복문 작성에 대해 알아보았습니다.
Catch the best of SAS Innovate 2025 — anytime, anywhere. Stream powerful keynotes, real-world demos, and game-changing insights from the world’s leading data and AI minds.