SAS Macro

SAS Macro Data step 에서 사용하는 매크로 변수 SYMGET

카이집사_Stats 2025. 5. 25. 20:59

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) 적절한 포맷과 타이틀을 이용하여 프린트 하면 다음과 같이 개별 금액, 부서별 퍼센트, 전체 퍼센트가 출력된다.