BookmarkSubscribeRSS Feed

[SAS 프로그래밍] 매크로 언어 - CALL EXECUTE

Started ‎06-17-2020 by
Modified ‎06-23-2020 by
Views 2,384

[SAS 프로그래밍] 매크로 언어 – CALL EXECUTE

 

 

 

안녕하세요. ^^

 

지난 시간에는 매크로 변수로 많이 활용되는 CALL SYMPUT routine에 대해 살펴보았습니다.

이번 시간에는 CALL macro routine과 관련하여 CALL EXECUTE routine에 대해 알아보도록 하겠습니다.

 

 

CALL EXECUTE를 사용하여 DATA step 내에서 매크로를 실행할 수 있습니다.

또한 이를 활용하여 매크로를 여러 번 실행하는 반복 작업을 한번에 실행할 수 있습니다. 

  

먼저, CALL EXECUTE는 아래와 같이 정의됩니다.

 

 

CALL EXECUTE(argument);

 

 

 예제 데이터

 

다운로드 - 2020-06-18T111905.860.jpg

 

예제로 사용할 데이터는 sashelp 내의 classfit 데이터 입니다.

 

 

▶ CALL EXECUTE 사용

▷ 먼저 간단한 예시들로 이 매크로 언어가 어떻게 사용되는지 확인해 보겠습니다.

 

다운로드 - 2020-06-18T111907.121.jpg

 

다운로드 - 2020-06-18T111908.922.jpg

 

▷ coding

위의 예시와 같이 CALL EXECUTE를 사용하면 원래는 단독으로 사용되던 %PUT 매크로가 DATA step 내에서 사용이 가능해집니다.

LOG창에서 “Hello world” 가 출력된 것을 확인 할 수 있습니다.

 

 

 

다운로드 - 2020-06-18T111910.081.jpg

 

다운로드 - 2020-06-18T111913.393.jpg

 

다운로드 - 2020-06-18T111911.818.jpg

 

▷ coding

이번에는 DATA step에서 classfit 데이터를 불러들여와서 해당 데이터에 있는 변수 name을 사용하였습니다.

결과는 오른쪽과 같이 %PUT 매크로와 문자들 “Students name is “과 함께 name 변수의 값들이 모두 출력되어 나옵니다.

 

이 결과는 두번째 코드에서 처럼

%put Students name is _______ 를 반복적으로 실행하는 것과 같은 결과를 출력합니다.

같은 작업을 여러 번 하지 않으면서 변수의 값들을 오류없이 그대로 가져와 사용할 수 있어 효과적입니다.

 

 

▶DATA step 내에서 새로운 DATA step 혹은 PROC procedure 실행 시키기

▷ 하나의 DATA step 내에서 또 다른 DATA step/ procedure 들이 실행되도록 할 수 있습니다.

 

다운로드 - 2020-06-18T111915.002.jpg

 

다운로드 - 2020-06-18T111919.746.jpg

 

 

다운로드 - 2020-06-18T111916.393.jpg

 

다운로드 - 2020-06-18T111918.042.jpg

 

▷ coding

먼저 SET문 으로 classfit 데이터를 불러들여와서 데이터 내의 값들을 활용하고자 합니다.

 

다음으로 CALL EXECUTE를 사용하여

classfit에서의 변수 name 값이 조건절과 일치하는 데이터만 work에 새로운 데이터 셋으로 생성하고자하며, 생성되는 데이터 셋 이름은 조건절에서의 name변수의 값으로 지정되게 하였습니다.

위의 내용이 classfit 내에 있는 모든 관측치에 대하여 반복적으로 실시됩니다.

 

이 때, 문자열을 합치는 || 를 사용하였습니다.

대신에 catx문과 같이 문자열을 합치는 다른 함수들을 사용할 수 도 있습니다.

 

결과는 오른쪽과 같이 학생들의 이름으로 명명된 데이터셋들이 생성되었고,

각각의 데이터 셋 안에는 해당 학생의 정보가 저장되어 있습니다.

 

이 결과는 두 번째의 코드처럼 data step을 일일히 여러 번 시행한 것과 같은 결과입니다.

 

 

 이번에는 DATA step내에서 PROC MEANS 가 실행되는 예시를 보도록 하겠습니다.

 

 

 

다운로드 - 2020-06-18T111921.050.jpg

 

다운로드 - 2020-06-18T111925.634.jpg

 

다운로드 - 2020-06-18T111922.466.jpg

 

다운로드 - 2020-06-18T111923.865.jpg

 

▷ coding

이번에 사용된 예제 데이터는 라이브러리 sashelp에 있는 CARS와 GAS 데이터 셋입니다.

 

CARDS; 에 불러올 데이터 셋 이름들을 입력하고

앞서 CALL EXECUTE 에 data step을 새롭게 사용하였던 것과 같이

이번에는 proc means 프로시저가 실행되도록 하기 위해 CALL EXECUTE 에 proc means를 입력하였습니다.

이번에도 마찬가지로 문자열을 합칠 때 || 를 사용하였습니다.

 

결과는 오른쪽과 같이 각각의 데이터 셋에 대해 proc means가 실행되어 출력되었습니다.

이 결과는 아래의 PROC MEANS DATA=sashelp.cars ; RUN; 의 코드를 데이터 이름에 따라 여러 번 시행하는 것과 동일한 결과입니다.

 

 

▶ 여러 SAS data set 한번에 불러들이기 / 내보내기

▷ 위에서 다루었던 내용들을 활용하여 여러 개의 SAS data set 을 한번에 옮겨보도록 하겠습니다.

 

 

 

다운로드 - 2020-06-18T111927.074.jpg

 

다운로드 - 2020-06-18T111928.761.jpg

 

다운로드 - 2020-06-18T111930.586.jpg

 

다운로드 - 2020-06-18T111932.522.jpg

 

 

▷ coding

예시에서는 SAS 내 라이브러리 sashelp에 있는 여러 데이터 셋들을 한번에 work로 저장하겠씁니다.

 

먼저 첫 번째 DATA step에서 가져오고자 하는 데이터 셋 명들을 tname이라는 변수에 저장되도록 하여 tablelist라는 데이터 셋을 생성하였습니다.

 

다음으로 매크로 변수 %let 을 사용하여 work 와 sashelp라는 라이브러리 이름을 지정해 주었습니다.

 

마지막 코드에서

SET tablelist : 방금 만든 tablelist 데이터를 가져와 사용할 것을 지정하고,

CALL EXECUTE : sashelp에 변수 tname에 저장되어 있는 이름과 같은 이름을 갖고 있는 데이터 셋들을 불러와서 work에 저장되도록 지정하였습니다.

 

결과는 오른쪽과 같이 work위치에 해당 데이터 셋들이 생성된 것을 확인하였습니다.

 

만약 %let 매크로에 sashelp나 work의 라이브러리가 아닌, 사용자가 원하는 경로를 지정해 주게 되면

여러 개의 데이터 셋들을 원하는 곳으로부터 다른곳으로 옮기거나 SAS밖으로 내보내기, SAS로 불러오기 작업들도 간단하게 시행할 수 있어 유용하게 사용할 수 있습니다.  

 

 

 

지금까지 매크로 언어 중 CALL EXECUTE에 대해 알아보았습니다.

 

감사합니다^^

 

 

 

[REFERENCE]

http://www.lexjansen.com/phuse/2014/cc/CC06.pdf

https://blogs.sas.com/content/sgf/2017/08/02/call-execute-for-sas-data-driven-programming/;

 

 

 

Version history
Last update:
‎06-23-2020 05:09 AM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

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.


Register now!

Article Labels
Article Tags