SYMGET
DATA step이 실행되는 동안 매크로 변수의 값을 DATA step 에서 이용하게끔 매크로 값을 호출하는 기능으로 예를들어,
x = symget('g’);
는 매크로 변수 G 에 들어있는 값을 data step 에서 변수 X 로 보낸다.
또 다른 예로,
score = symget(‘s’||left(_n_));
연결 연산자 (||) 와 같이 사용하여 data step 변수인 _N_ 을 연결하여 일련의 변수들을 표현할 수 있다.
| data dusty; input dept $ name $ salary @@; cards; bedding Watlee 18000 bedding Ives 16000 bedding Parker 9000 bedding George 8000 bedding Joiner 8000 carpet Keller 20000 carpet Ray 12000 carpet Jones 9000 gifts Johnston 8000 gifts Matthew 19000 kitchen White 8000 kitchen Banks 14000 kitchen Marks 9000 kitchen Cannon 15000 tv Jones 9000 tv Smith 8000 tv Rogers 15000 tv Morse 16000 ; run; (1) proc means noprint; class dept; var salary; output out=stats sum=s_sal; run; (2) proc print data=stats; var dept s_sal; title "Summary of Salary Information"; title2 "For Dusty Department Store"; run; (3) data _null_; set stats; if _n_=1 then call symput('s_tot',s_sal); else call symput('s'||dept,s_sal); run; (4) data new; set dusty; pctdept=(salary/symget('s'||dept))*100; pcttot=(salary/&s_tot)*100; run; (5) proc print data=new split="*"; label dept ="Department" name ="Employee" pctdept="Percent of *Department* Salary" pcttot ="Percent of * Store * Salary"; format pctdept pcttot 4.1; title "Salary Profiles for Employees"; title2 "of Dusty Department Store"; run; |
(1) PROC MEANS 로 요약한 결과를 STATS 라는 파일로 보내고
(2) S_SAL 변수에 봉급 금액의 합계를 표시하여 각 부서와 봉급의 총금액이 포함된 STATS 파일을 프린트하면 다음과 같다.

(3) STATS 파일에서 S_SAL 변수의 첫 자료 (221000) 를 S_TOT 라는 매크로 변수로 넣고, 그 외 것은 ‘S’ 로 시작하는 부서명을 붙여 변수명을 만든 후 각 S_SAL 의 값을 저장 (CALL SYMPUT 설명에도 있음)
(4) Data set NEW 에서는 원자료를 이용하여 각 사람들의 부서 내에서의 퍼센트와 전체 퍼센트를 나타내어
(5) 적절한 포맷과 타이틀을 이용하여 프린트 하면 다음과 같이 개별 금액, 부서별 퍼센트, 전체 퍼센트가 출력된다.

'SAS Macro' 카테고리의 다른 글
| SAS Macro 매크로 변수값 출력 %PUT (0) | 2025.05.25 |
|---|---|
| SAS Macro Data step 에서 사용하는 매크로변수 CALL SYMPUT (0) | 2025.05.25 |
| SAS Macro 매크로 함수 %UPCASE, %LOWCASE (0) | 2025.05.25 |
| SAS Macro 매크로 함수 %SUBSTR, %QSUBSTR (0) | 2025.05.25 |
| SAS Macro 매크로 함수 %SCAN, %QSCAN (0) | 2025.05.25 |