带你读《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;

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

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

相关文章
|
3月前
|
数据采集 存储 监控
数据驱动开发:如何将数据分析融入开发流程
【8月更文挑战第14天】数据驱动开发是一种高效、智能的软件开发方法论,它通过将数据分析深度融入开发流程中,实现了精准决策、提升效率和持续改进的目标。为了成功实施数据驱动开发,团队需要明确数据需求、设计合理的数据架构、集成数据收集工具、实施CI/CD流程、进行数据分析与决策支持以及建立反馈循环机制。同时,还需要应对数据质量、技术和组织与文化等挑战。通过不断努力和实践,团队可以逐步建立起完善的数据驱动开发体系,推动产品不断迭代升级和业务持续增长。
|
5月前
|
存储 弹性计算 DataWorks
云端开发与数据分析的强强联合
通过这次方案的搭建和使用,我更加确信阿里云产品组合是企业数字化转型的强大助力。我鼓励大家积极探索和尝试这些服务,以发掘它们在实际业务中的潜力和价值。我深刻体会到了阿里云产品组合的强大能力和灵活性。它们不仅帮助我们解决了实际问题,还为未来的发展提供了坚实的基础。我强烈推荐其他企业和开发者尝试这样的产品组合,以提升开发效率和数据处理能力。
133 35
|
5月前
|
存储 数据挖掘 索引
Python streamlit框架开发数据分析网站并免费部署
使用Python的Streamlit框架,开发了一个在线数据分析工具,替代Excel查看设备温度CSV数据。通过pandas读取数据,matplotlib绘制图表。程序处理CSV,提取所需列,计算最大最小平均值,用户可多选查看特定数据。[GitHub](https://github.com/yigedaigua/MGHB)上有完整代码,应用已部署至Streamlit Cloud。
109 1
|
6月前
|
数据可视化 数据挖掘 Python
基于Python开发的Excel数据分析系统(源码+可执行程序+程序配置说明书+程序使用说明书)
基于Python开发的Excel数据分析系统(源码+可执行程序+程序配置说明书+程序使用说明书)
145 0
|
6月前
|
机器学习/深度学习 数据挖掘 BI
推荐一款 Python 数据分析报告开发与分享神器
推荐一款 Python 数据分析报告开发与分享神器
119 0
|
6月前
|
机器学习/深度学习 数据采集 人工智能
Python可以应用于多个领域,如Web开发、数据分析、机器学习等
Python可以应用于多个领域,如Web开发、数据分析、机器学习等
120 0
|
SQL 数据采集 数据可视化
数据开发模块中的SQL和数据分析模块中的SQL查询
数据开发模块中的SQL和数据分析模块中的SQL查询
176 1
|
数据挖掘
怎么理解数据分析、维度和指标?
怎么理解数据分析、维度和指标?
|
机器学习/深度学习 人工智能 算法
Python编程入门基础及高级技能、Web开发、数据分析和机器学习与人工智能
Python编程入门基础及高级技能、Web开发、数据分析和机器学习与人工智能
177 0
|
存储 数据挖掘 API
python开发:空气质量历史数据分析(一)
python开发:空气质量历史数据分析(一)
173 0