SAS(十四)SAS宏相关知识

SAS(十四)SAS宏相关知识

SAS宏

  1. 利用宏可以减少在完成一些共同任务时必须输入的文本量
  2. 利用宏可以使程序模块化,使程序易读、便于修改、移植、方便重复使用

SAS宏变量

  1. 宏变量属于SAS宏语言,与普通变量的区别是可以独立于DATA步
  2. 可以在SAS程序中除数据行之外的任何地方定义并使用宏变量
  3. %let语句定义宏变量并分配一个值给宏变量(如:%let dsn=3)
  4. 当引用一个宏变量的值,放&号在宏变量前
  5. 使用%str函数围住宏变量的值,使得在这个值内部的分号作为这个文本的部分,而不是%let语句的结束
  6. 使用%put语句在LOG窗口显示宏变量的值
  7. SAS/BASE中的自动宏变量,如:sysver, systime(给出SAS程序或会话开始执行的时间);
%put &sysver;                                                                                                                           
%put &systime;                                                                                                                          
%put &sysdate;                                                                                                                          
%put &sysscp;/*返回用户主机系统的缩写*/

title "This macro is writen by &yvar";                                                                                                  
%let xvar=123.45;                                                                                                                       
%let yvar=zhao;                                                                                                                         
%put xvar;                                                                                                                              
%put &xvar;                                                                                                                             
data;                                                                                                                                   
input a;                                                                                                                                
cards;                                                                                                                                  
1                                                                                                                                       
;                                                                                                                                       
run;                                                                                                                                    
proc print;                                                                                                                             
run;

%macro create;                                                                                                                          
  data tem;                                                                                                                             
    set peixun.fitness;                                                                                                                 
        if age>=50;                                                                                                                     
%mend create;                                                                                                                           
%create;                                                                                                                                
run;                                                                                                                                    
proc print data=tem;                                                                                                                    
run;

宏参数

  1. 被定义在一个%macro语句的宏名字后括号内的宏变量称为宏参数,可以直接给出宏参数的值,也可以在调用这个宏时给出这些参数的值。
  2. 对参数分配的值只在这个宏执行时有效,而宏变量从用户创建直到SAS会话结束前都存在
data temp1;                                                                                                                             
  set peixun.fitness;                                                                                                                   
run;                                                                                                                                    
%macro plot(yvar=age,xvar=weight);                                                                                                      
  proc plot;                                                                                                                            
    plot &yvar*&xvar='*';                                                                                                               
  run;                                                                                                                                  
%mend plot;                                                                                                                             
%plot()                                                                                                                                 
%plot(xvar=runtime);                                                                                                                    
quit;

%macro create;                                                                                                                          
  data temp;                                                                                                                            
    set peixun.fitness;                                                                                                                 
    if age>=50;                                                                                                                         
%mend create;                                                                                                                           
%*The first macro generates DATA;                                                                                                       
%macro plot;                                                                                                                            
  proc plot;                                                                                                                            
    plot &yvar*&xvar='.';                                                                                                               
run;                                                                                                                                    
%mend plot;                                                                                                                             
%*The second macro generates PROC;                                                                                                      
%macro analyze(getdata,yvar,xvar);                                                                                                      
  title;                                                                                                                                
  %if %upcase(&getdata)=YES %then                                                                                                       
  %do;                                                                                                                                  
    %create                                                                                                                             
        title3"Data Set Created for The Plot";                                                                                          
  %end;                                                                                                                                 
%plot                                                                                                                                   
%mend analyze;                                                                                                                          
%analyze(yes,age,weight);                                                                                                               
quit;

猜你喜欢

转载自blog.csdn.net/LuYi_WeiLin/article/details/103275096
SAS