带你读《SAS数据分析开发之道 软件质量的维度》第三章通信交流3.4用户生成的返回码(一)-阿里云开发者社区

开发者社区> 人民邮电出版社> 正文

带你读《SAS数据分析开发之道 软件质量的维度》第三章通信交流3.4用户生成的返回码(一)

简介: 带你读《SAS数据分析开发之道 软件质量的维度》第三章通信交流3.4用户生成的返回码
+关注继续查看


用户生成的返回码

正如SAS系统返回码能显示 SAS程序、DATA步骤、函数及程序指令的成败,开发人员应该使用用户生成的返回码来验证自己的宏、进程及程序。在软件设计过程    中,应该能够识别那些导致软件故障的漏洞,并确认哪些检测漏洞的程序可以推行到    异常情况处理框架中。第 6章介绍了防错性程序设计,并列举了一些看似简单的SAS程序中的漏洞案例,如阅读数据集。

一个软件的最佳操作是要求每个创建的宏都能至少产生一个返回码。在宏指令的第一行将&SYSCC赋值为“0”,并在宏结束时检查&SYSCC值,这样能够防御一些意想不到的故障,没必要评估子进程中的&SYSCC   值,但要评估引用宏并依赖子进程顺利进行的父进程中的值。例如,在   DATA    步骤之前,可能想确认被引用的数据集不是空白的。

宏%GETOBS能够确定数据集中观测值的数量。如果因某些原因出现了故障,&GETOBS_RC 返回码会显示该故障。

datatemp;run;

 

*determinesthenumberofobservationsinadataset;

%macrogetobs(dsn=/*  datasetnameisLIB.DSNorDSNformat*/);

%letsyscc=0;

%globalobstot;

%letobstot=;

%globalgetobs_rc;


 

 

 

%letgetobs_rc=GENERALFAILURE;procsqlnoprint;

selectcount(*)into:obstotfrom&dsn;

quit;

%if&syscc>0%then%letgetobs_rc=somethingaintright!;

%else%letgetobs_rc=;*emptyshowssuccess;

%mend;

 

%getobs(dsn=temp);

%putRC:getobs_rc;

RC:somethingaintright!

 

即便开发人员没有意识到 SQL程序指令在数据集没有任何变量的情况下会发生故障(如Temp),&SYSCC也会捕获这一潜在的、不可预见的错误。“运行时错误”依然会发生,但调用 %GETOBS的父进程将能够动态变更线路或稳健地终止,而不是受制于连锁故障。需要注意的是,返回码的命名应具有独特性,以避免它与 其他程序的返回码混淆。第      11     章“重复宏变量”部分会讲到这一点。用户生成的返回码通常可通过两种方法进行操作 :带内信号及带外信号,以下会对这两部分进行介绍。

 

带内信号

带内信号指通过现有渠道传递元数据,数据主要通过该途径转移。关于软件开发,带内返回码转移的是同一宏变量内的性能信息——元数据,否则数据就会被转移。带内返回码的一个优点是简单,因为无须创建一个单独的通用宏变量户生成的返回码分举的例子是一个带外返回码&GETOBS_RC,该返回码独立于 &OBSTOT宏变量。相反,带内解决方案在出现异常情况或错误时能够将&OBSTOT的值指定为“有些事情不对劲,从而使得&OBSTOT在观测数值计数不能保留的情况下包含观测数值的数量或错误信息。

带内返回码最大的缺点是它们必须能够与有效数据清清楚楚地区分开,若未区分开,有效数据可能会出现在宏变量中。例如,一个用于表示数据集中变量数量的宏变量将包含数值型数据,这使它自身能够通过字母数字数据表达附加的返回码值。字母数字返回码不会与有效数值数据混淆。

在上述SYSRC()部分介绍过一个用户生成返回码的例子%TEST宏发生故障,本地宏变量 &VARS设置为 FAILURE。%GLOBAL宏创建该返回码,%LET程序指令将它的值初始化。初始化能够确保在ATTRN发生故障且 &VARS未被设置为数据集中变量数量的情况下,故障能够显现出来。

%macrotest;

%letsyscc=0;

%globalvars;

%letvars=GENERALFAILURE;

%letdsid=%sysfunc(open(perm.final,i));

%if%sysfunc(sysrc())=0%then%do;

%letvars=%sysfunc(attrn(&dsid,nvars));

%letclose=%sysfunc(close(&dsid));

%end;

%else%letvars=FAILURE;

%mend;

 

%test;

%putVARS:&vars;

在本例中,带内返回码 &VARS有3个可能的结果 :如果 &VARS是一个数字, 那么它代表的是PERM.Final数据集中出现的变量的数量 ;如果 &VARS是FAILURE,那么它表示的是OPEN   遇到了异常情况,如一个丢失或锁定的数据集   ;如果 &VARS是 GENERAL   FAILURE,那么它表示一些其他的异常情况或错误阻止了&VARS的赋值。

带内返回码远不如带外信号常见,因为带内信号要求元数据与数据之间界限分明。因此,如果宏变量被设计成包含字母、数字、文本,则更难将有效值与性能元数据区分开,性能元数据是在无法生成有效值的情况下被传递到变量的数据。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SAS进阶《深入分析SAS》之数据汇总和展现
SAS进阶《深入分析SAS》之数据汇总和展现 1. 通过Print过程制作报表 proc print <data=数据集>; run; 选项: obs=修改观测序号列标签 noobs不显示观测序列号 id语句在输出中取代观测序列 var选择输出的变量 where语句选择输出的观测 总结如下: proc print data=数据集<选项&g
1164 0
SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理
SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理 1. SAS变量操作的常用语句 ASSIGNMENT 创建或修改变量 SUM 累加变量或表达式 KEEP 规定在数据集中保留的变量 DROP 规定在数据集中删除的变量 ARRAY 定义一个数组 RENAME
1387 0
SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制
SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和END之间的语句 DO WHILE 重复执行直到条件为假则退出循环 DO UNTIL 重复执行直到条件为真则退出循环 DO OVER 对隐含下标
1240 0
SAS学习笔记之《SAS编程与数据挖掘商业案例》(5)SAS宏语言、SQL过程
SAS学习笔记之《SAS编程与数据挖掘商业案例》(5)SAS宏语言、SQL过程 1. 一个SAS程序可能包含一个或几个语言成分: DATA步或PROC步 全程语句 SAS组件语言(SCL) 结构化查询语言(SQL) SAS宏语言 2. 宏触发:% 是一个宏语句或宏函数;&是一个宏变量引用 3. 局部宏变量:一般程序定义的为宏变量。 全局
1666 0
SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集
SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集 前言:在学习完《SAS编程与商业案例》后,虽然能够接手公司的基本工作,但是为了更深入的SAS学习,也为了站在更高的一个层次上去掌握和优化公司工作,故而又咬紧牙关加紧学习《深入解析SAS》.就目前的两本书的对比,显而易见的是本书比《SAS编程…》要厚的多,再者内容更新是2015年著,最后是内容详实
1746 0
SAS进阶《深入解析SAS》之SAS数据挖掘的一般流程
SAS进阶《深入解析SAS》之SAS数据挖掘的一般流程 1. 所谓数据挖掘,是指通过对大量的数据进行选择、探索与建模,来揭示包含在数据中以前不为人所知的模式或规律,从而为商业活动或科学研究提供帮助和服务。 2. 数据挖掘重要的两个类别:有监督分析(SupervisedAnalysis),无监督分析(UnsupervisedAnalysis)。 有监督分析属于目标
1072 0
472
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载