- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
sas宏收集资料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
您可能关注的文档
- RFID图书馆(易化)RFID图书馆(易化).doc
- R语言文本挖掘R语言文本挖掘.doc
- RZ-空分装置试车方案RZ-空分装置试车方案.doc
- RTX问题汇总RTX问题汇总.doc
- S 版 语 文 第 十 册 教 案S 版 语 文 第 十 册 教 案.doc
- r教育均衡调查r教育均衡调查.doc
- S103冬季施工方案S103冬季施工方案.doc
- s1-沟通技巧s1-沟通技巧.doc
- S221施工组织设计S221施工组织设计.doc
- S-Video接口S-Video接口.doc
- 语文-广东省肇庆市2025届高三第二次模拟试卷和答案(肇庆二模).docx
- 中国通信行业运行情况月度报告(2024年1-11月).pdf
- 2024年中国新能源汽车行业全球竞争力分析与各国进口贸易法规影响白皮书-特易资讯.pdf
- 热电“三保”与碳排双控.pdf
- 数据中心行业分析报告 2025.pdf
- 【灼鼎咨询】2024年自动驾驶行业知识报告(智能驾驶、新能源汽车、NOA).pdf
- 政治-江苏省苏州市2024-2025学年2025届高三第一学期学业期末质量阳光指标调研卷试题和答案.docx
- 政治-广东省东莞市、揭阳市、韶关市2025届高三期末教学质量检查试题和答案.docx
- 自适应物理安全与信息安全系统 -智能制造的动态安全方法 2025.pdf
- 【国联证券】通信行业专题研究:Marvell AI day,算力需求推动光互联加速迭代.pdf
最近下载
- 西南11J516室外装修[1] .pdf VIP
- 2024年高考化学真题完全解读(湖南卷).pptx VIP
- 新概念青少版2A期中测试题.pdf VIP
- 数列(共84张课件).pptx VIP
- 2024年高考化学真题完全解读(湖北卷).pptx VIP
- 2024年高考真题完全解读课件:2024年高考化学真题完全解读(河北卷).pptx VIP
- 室内燃气泄露应急处理课件.pptx VIP
- (部编版)语文二年级上册寒假课外阅读“天天练”30篇,附参考答案.doc
- 专题09+阅读回答问题20篇(近年中考真题)-2024年中考英语逆袭冲刺名校模拟真题速递.docx VIP
- 总经理年终工作总结报告PPT课件.pptx VIP
文档评论(0)