![bf177e50ae41a9a1e168b751fc10f6ad.png](https://i-blog.csdnimg.cn/blog_migrate/fe7c0ac71ff3c5bf44661cd5c0902286.jpeg)
一、什么是宏?
当我们刚开始接触宏的时候,往往会使用些由%LET、CALL SYMPUT和PROC SQL INTO等建立一个全局的宏,应用到后续的过程步中,随着这些宏的频繁使用,我们脑海里往往会形成一个这样的概念:在SAS中,预处理器会根据一系列预定义的“内容”对源代码进行替换运行。如下例1:
%LET OUTPATH = %STR(E:TEST) ;
%LET TABLENAME = %STR(TEST);
********
ODS RTF FILE = “&OUTPATH.&TABLENAME..rtf” ;
********
但随着宏更进一步的使用,慢慢的会发现自己之前给的这么一个定义也没那么准确,好像差点什么,尤其是在宏过程的使用中。宏参虽然也是一个个“内容”,但更确切的说,它是一个个符合需求的条件,这个时候我们的概念就更加清晰了:在SAS中,预处理器会根据一系列定义的规则有条件地对源代码进行替换运行。如下例2:
LET OUTPATH = %STR(E:TEST) ;
%MACRO CLASS(FACTOR ,TABLENAME) ;
DATA CLASS ;
SET SASHELP.CLASS ;
&a