老老实实看书,勤勤恳恳练手,规规矩矩编程!
关于SAS学习,目的不同,学习的策略也会有所不同。我们姑且将学习目的分为三种:
-
Framework, 安装SAS时需要的微软组件,安装前SAS会自动检测,如果操作系统里没有,可单独下载安装,否则可能会导致SAS高级编辑器出问题
SAS安装光盘提取后是长这样子的(订单号马赛克):
我支持正版!没有哦。(公开场合哪能告诉你啊!)
PART 3:规规矩矩编程!
这是一个比任何时代都讲究颜值的时代。过去的我们,更多的是消费女色,而现在的我们,也开始消费男色了。你看,那么多的奶油小生走红(当然没我什么事),或许从侧面说明了一些情况。
我隐约记得,蒋介石手下曾有位文人,他大致表示过:人们如果开始正视“美”,那就说明这个社会是进步了。也只有在高度文明的社会,“美”才会获得其应有的尊重和爱护,而不是糟嫉妒和占有。由此可见,对“美”的正直的追求本身就是一种美。
对于木讷的程序袁来说,其实我们也是追求“美”的。 我们对美的追求,一方面体现在追求“美女”上,另一方面体现在追求代码的“美观”上。作为一个半道出家的野生码农,不敢对编程语言的优雅做过多讨论,但是作为一个SAS Programmor 或者Statistician , 对于追求SAS语言的美观,是无可厚非的。
这里,有一个专业术语,叫GPP。或许我们听说过GCP、GMP以及GSP。What is GPP? GPP, 即Good Programming Practice, 良好的编程实践, 是指为了程序的美观和效率,在长期的实践过程中逐渐形成的,约定俗成的,获得广泛认可的良好的编程习惯和规范的编程风格。
其实没有那个定义啦,是我个人YY,自定义的啦。但良好的编程习惯和规范的编程风格,确实是值得注意和提倡的。GPP不仅方便自己修改、调试、管理和维护自己的代码,也便于同行间代码的交流和共享。那么, 一个SAS Programmor 或者 Statistician 有哪些可以参考的SAS GPP呢?下面将从命名、注释、外观、效率、维护以及宏等方面做一简要介绍。
命名规范包括文档(程序文件),逻辑库、数据集、变量、宏程序、数组以及格式的命名。任何组织和机构都应有一套标准的命名规范,命名应尽可能简洁清楚的表述其含义(如用后缀fmt表示变量格式名),临时数据集及变量名应有一套一致的命名规则(如用_tmp 表示tmp临时变量)。有点建议用驼峰式大小写(Camel Case)命名(如FirstName),但由于SAS不区分大小写,有点建议用下划线命名数据集和变量( 如Fisrt_Name)。
任何代码文件,注释先行。在代码头部的注释框里注明项目名称、代码名称、代码目的、代码作者、发布时间、开发平台、修改日志等信息。此外,在每个主要的DATA步和PROC步前都应增加注释说明,如果使用了一些特别的技巧,也建议增加注释说明。
在具体的编程过程中有很多细节方面的考虑,可以使程序的外观更规范,易读。例如:
-
程序以DATA步和PROC步分大块,每个DATA步和PROC步均以RUN或者QUIT结尾,以便明确分块边界,也便于每个步独立运行
-
DATA 步和PROC 步至少空一行以分隔开来
-
DATA步里按一定的逻辑分节,每节至少空一行
-
全局语句,DATA步和PROC步语句及其相应的RUN和QUIT语句应左对齐,里面的语句应做相应的缩进
-
DO循环块中,语句要缩进,将END对齐DO
-
IF语句块中,语句也要缩进,将END对齐IF或ELSE
-
语句缩进2-5列,但要统一,建议用空格而非制表符
-
所有定义语句(如格式定义、宏程序定义)放置在程序顶部
-
%LET 语句定义的宏参数统一放置在宏调用之前
在一些规范里,可能不把效率作为基本规范做强调,但是高效的程序能节省大量的时间和资源,也便于日后的维护和管理。
-
合理使用DROP、KEEP语句,精简数据库,使数据库只保留必要的变量
-
合理使用WHERE、IF语句,精简数据库,使数据库只保留必要的观测
-
将最有可能的结果放在IF的第一个条件
-
IF-ELSE 语句中,用ELSE语句囊括其他可能的条件
-
仅对做必要变量进行排序
一些TIPS, 方便日后代码的维护。
-
用%LET语句定义常量, 尽量避免使用硬代码
-
宏调用嵌套不要超过2层
-
在程序末尾创建永久数据集,不要分散于程序中
-
避免非初始化的变量,非初始化的变量的出现可能是因为变量不在数据集中,或者拼写错误。无论哪种情况,都有可能造成错误的结果
-
避免数据类型的自动转换,使用PUT或INPUT函数,对字符和数字进行显性转换
-
PRINT输出时,使用TITLE语句增加标题
-
算术及逻辑表达式中,合理使用括号以便使运算顺序更清晰
宏程序的里的代码也应遵循上述规范,不过宏程序因其本身的特殊性,还需遵循额外的一些规范。
-
定义宏时在%MEND 语句里加上宏变量名称
-
宏参数超过两个时,建议使用关键参数
-
尽量使用局部宏参数,而非全局宏参数
-
经常使用的宏,存储在自动库中;偶尔只在某个程序中使用的宏,在程序中定义即可
以上只是较为基本,也是较为广泛的编程规范,具体到不同的行业考虑得会更多。例如在医药行业,特别是临床试验中,就必须考虑的FDA、CFDA 等国家法规部门的要求,以及CDISC,ICH 等行业规范。在医药企业,还需遵循各企业相应的标准操作规范(SOP)。
个人体会:没有强大的统计理论+行业知识去用SAS, 感觉就像把iPhone当成对讲机用了!
很久没推文了,旧文更新。
最近遭遇了2016最糟糕的一个月,身心疲惫。
愿2017年的美好,都已提前蛰伏在前方!
-
感谢支持鼓励,形式包括不限于转发,转载,推荐,赞赏。
-
微信公众平台可直接转载,欲获取修改白名单权限,请后台回复「51BMD」。
-
其他平台转载,不得省略作者信息,包括公众号二维码。