- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
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
您可能关注的文档
- OneNot的e_2013_Step_Through.docx
- opencv的 人脸识别 (二训练和识别.docx
- PC Req的uirements and Technical Issues-R.doc
- pentah的o kettle solution.docx
- PKDGRA的VA Parallel k-D Tree Gravity Solver for N-Body.ppt
- Power 的to Change Plug-in Electric Vehicle Update.pptx
- ppt fa的ce Recognition.ppt
- Predic的tion of total manufacturing costs for stamping tool on the basis of CAD-model of finished prod.doc
- Produc的t data management (PDM.ppt
- Projec的t_Pro_v1.doc
- 2023年黑龙江省哈尔滨市道里区新华街道招聘社区工作者真题及参考答案详解1套.docx
- 2023年黑龙江省大庆市肇州县永胜乡招聘社区工作者真题含答案详解.docx
- 2023年黑龙江省牡丹江市海林市新安朝鲜族镇招聘社区工作者真题及参考答案详解.docx
- 2023年黑龙江省哈尔滨市松北区万宝街道招聘社区工作者真题及答案详解1套.docx
- 2023年黑龙江省哈尔滨市道外区新乐街道招聘社区工作者真题含答案详解.docx
- 2023年黑龙江省绥化市北林区吉泰招聘社区工作者真题参考答案详解.docx
- 2023年黑龙江省哈尔滨市香坊区建筑街道招聘社区工作者真题附答案详解.docx
- 2023年黑龙江省哈尔滨市道外区民主乡招聘社区工作者真题附答案详解.docx
- 2023年黑龙江省牡丹江市海林市二道镇招聘社区工作者真题含答案详解.docx
- 2023年黑龙江省大庆市萨尔图区铁人街道招聘社区工作者真题及参考答案详解一套.docx
文档评论(0)