- 1、本文档共49页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
sas宏收资料
SAS Macro编码的好习惯之一
?
能被大家都使用的SAS Macro编写指南
Guidelines on Writing SAS Macros for Public Use
?
原文地址:/proceedings/sugi29/047-29.pdf
转载请注明出处:/s/blog_5d3b177c0100bjom.html
?
从优秀的源码中学习应该算是一条非常好的学习SAS的途径,我们经常在网上看到一些公开的且优秀的源码。今天我们就来讲一些SAS Macro编写的规则,有了这些规则,你的SAS代码将更容易被别人读懂,从而让更多的人学习和重用。
?
1 文档化
文档化一直是很重要的东西,特别是对SAS Macro,因为只有这样才有更多的人知道这些Macro如何才能正地确地执行,并且结果是他们所需要的。下面介绍由Whitney (1996)提出来的SAS Macro的文档模板:
?
上面这些信息可以根据实际情况选择性地列举出来。
其次,为了使代码更有可读性,我们还可以将功能、变量等名字取得更具清晰明白,从而让人能根据其名字就知道这个函数或变量是干什么用的。例如要创建一个重复的数据集,我们可以用PRINT_DUPS来命名这个数据集,而不是用CheckData来命名,还有就是可以用SAS的保留字来作用后缀或前缀等,例如,SAS Macro里的数据集参数,我们可以用In_Data或Out_Data等,这样我们就很清楚地知道这是数据集,其它的如Keep、Where、Nobs等。一个非常重要的一点是命名一定要有连续性,也即风格要一致。
最后就是SAS Macro的函数或变量最好用描述性的名字命名,这样在后期的Debug或应用时都能帮助理解,例如一般不用i或j等一般性的变量来命名,取而代之以year,visit等来命名。
另外我们还可以加一些选项来对宏进行Debug,这些选项如MPRINT,MLOGIC和SYMBOLGEN等,以及用%put进行Debug。这一块我们讲专门介绍如何Debug Sas Macro。
?
2获取错误信息
我们可以被动地通过SAS自己的错误提示来得到错误信息,另一方面,我们可以主动地写一些代码来获得错误信息。当然我们很难预测并获取所有的错误信息,但是有一些错误是很标准化的,这些错误我们可以尽量自己获取。例如我们可以通过%LENGTH来判断宏变量是否被指定:
%if %length(data) = 0 %then %do ;
? %put ERROR: Value for macro parameter DATA is missing ;
? %goto finish ;
%end ;
?
%finish:
这样,如果没有宏变量,则其length将为空或0,这样就会生成一条错误信息并结束过程。
?
另一个例子是判别是否指定的数据集存在:
%let error = 0 ;
%if %sysfunc(exist(data)) = 0 %then %do ;
? %put ERROR: data set data does not exist ;
? %let error = 1 ;
%end ;
?
%if? error = 1 %then %goto finish ;
?
%finish:
这些例子都比较简单,我们在应用于的时候可能会遇到更复杂的情况。其它的应用包括判别变量是否为字符型,是否库名或格式合法等等。为了让主Macro不显得太复杂,我们可以写一些子宏来完成这些功能。
?
还有一个比较好的习惯是我们可以预先赋给宏变量一些默认值,而不是完全由用户来赋值。并且我们还可以增加赋值的变化来减少输入值可能的错误,例如:
%let debug = %upcase(debug) ;
通过将debug全部转化为大写,从而用户可以输入任意的大小字母,对结果都无影响。另一个例子:
%let debug = %upcase( %substr(debug,1,1 ) ) ;
我们只取第一个字母,且将其大写,这样,用户可能多输入几个字母,但对结果亦无影响。
?
3 减少一些可能引起歧议的句子
由于程序总会以程序员没有考虑到的方式运行,比如建立了一个已存在的数据集,这样就很可能将原来的数据集覆盖了。因为,一个简单的方式是我们建立数据集时,一定要先检查一下是否已存在这个数据集,另外,对于Macro生成的数据集,当我们不再需要它时,一定要将其删除。
另一个经常发生的问题是全局宏变量,在Macro中,其值被修改了:
%let x = 5 ;
%macro check ;
%* %local x ;?
%let x = 1 ;?
%mend check ;
%check
%put x = x ;
这里的x为1而不是5。这就是因为全局宏变量x
您可能关注的文档
最近下载
- 2024年人大常委会工作报告讨论发言稿三篇.docx VIP
- [工程科技]TMS320F28027中文版实验教程.pdf
- 北京市石景山区2023-2024学年高一上学期期末生物试题 Word版含解析.docx
- 北京市石景山区2024_2025学年高一数学上学期期末考试试题含解析.doc VIP
- 图书馆运营管理服务投标方案.doc
- 新时达AS380全系(380、380B、380C、380D、380S)快捷调试方发.docx
- 北京市西城区师范大学附属中学2024_2025学年高一语文上学期期末考试试题含解析.doc VIP
- 数学必修41.1.1任意角课件PPT课件一等奖新名师优质课获奖比赛公开课.pptx
- 小学考查学科评价方案.pdf
- 巴塘卓帆水泥2500td熟料新型干法水泥生产线项目施工组织设计.doc
文档评论(0)