如何编写宏程序
宏程序的结构
宏程序以%macro+宏程序名开始,%mend为结尾,想要执行宏程序需要调用宏,语法为%+宏程序的名称
%macro print(用户自定义的宏名称);
proc print data=sashelp.cars;(proc print 命令)
run;
%mend ;
嵌套宏—需要使用%mend +宏程序名指定哪个是宏程序结尾
%macro program1;
statment.......;
%macro program2;
statement....;
%mend program2:
%mend program1;
宏变量(用&表示)
- 宏变量使用&表示,在创建过程中使用%let语句,输出值%put语句
% let a = hellow world;
%put &a;
- %let语句创建宏变量时,不需要加&以说明变量为宏变量
- %put输出时候,需要在变量前加&以说明变量为宏变量
- 宏变量不分类型,即使字符型变量也不需要加引号,%let语句会直接读取等号之后,分号之前的文本
- 空格不会作为宏变量赋值的终止符
%let a=3;
%let b=9;
%put %eval(一个宏函数)(&a+&b)
宏参数
基本参数
宏参数是在宏程序创建时定义的宏变量,紧跟%macro宏程序定义之后,在宏程序被引用的时候,可以将参数一并提交给宏运行,且不同参数值打印不同的数据集
%macro print(data);
proc print data=&data;
run;
%mend;
%print(sashelp.cars);
%print(sashelp.baseball);
创建多个参数
%macro print(dara,n);(可以创建多个参数,之间以逗号分隔)
proc print data=&data(obs=&n);
run;
%mend;
%print(sashelp.cars,3);执行打印之后的前三条记录
宏参数的定义(两种)
- 参数1,参数2,…的格式(位置参数)定义使用简单,无法处理缺省参数容易出错
参数1=参数值1,参数2=参数值2…的格式(关键词参数),定义和使用相比位置参数有所不变,对于缺省参数可以正常使用