什么是SAS宏语言:如何使用SAS宏语言来提高编程效率
SAS宏语言实际上是一种文本语言。在宏语言中所有变量的值都只能是字符。宏语言的特征之一是带有符号“&”和“%”,前者一般与宏变量一起使用,后者常与宏一起使用。下面结合例子简单说明如何使用宏语言来提高编程的效率。
例7.1:数据集sashelp.orsales中包含1999~2002年的销售信息。要求生成一个2001年销售记录的报告,并且要求报告的标题必须包含报告创建的时间、星期与日期,副标题要包含生成报告的操作系统与SAS版本信息。
实现代码如下:
data orsales2001; set sashelp.orsales; if year = 2001; run; proc print data = orsales2001; title "Sales Record in Year2001"; footnote1 "Created 22:01Monday, 21OCT2013"; footnote2 "on the WIN System Using SAS 9.3"; run;
上述代码虽然实现了目标,但是不易维护,主要体现在以下两个方面:
·阴影部分(报告时间、星期、日期以及操作系统信息等)都需要用户手动输入。
·上述代码中2001出现了4次。假设用户想查看其他年份的数据集,不使用宏语言,只能在程序中将出现的所有2001都做替换。
使用宏语言改写上述代码如下:
1. %let year = 2001; 2. data orsales&year; 3. set sashelp.orsales; 4. if year = &year; 5. run; 6. proc print data = orsales&year; 7. Title "Sales Record in Year&year"; 8. footnote1 "Created &systime &sysday, &sysdate9"; 9. footnote2 "on the &sysscp System Using SAS &sysver"; 10. run;
上述代码中,第1行定义了宏变量year,并赋值为2001。在余下代码中,使用&year来代替2001。假设现在要查看2002年的信息,只需修改第1行赋值处即可,这显然比例7.1中的代码更容易维护。此外,脚注footnote里面利用&systime、&sysday等系统宏变量,自动生成了需要的时间信息,避免了手工输入(具体见例7.7)。
宏语言的作用还体现在可以有条件地执行代码。假设一位数据管理人员需要在每天下班前生成一个当天的日报告,若该天是周五,则需要生成一个本周的报告(周五不用生成日报告)。这就涉及条件控制了。使用DATA步和PROC步都无法简单地实现流程的条件控制,但通过宏语言可以很方便地解决这一问题。这里仅给给出流程,具体代码会在介绍相关知识后给出。流程如下:
%if (当天是周五) %then (周报告代码) %else (当天报告代码)
运行上述程序,SAS会自动判断该执行哪段代码。总之,SAS宏语言可以让SAS编程更加灵活,易于使用与维护。