带你读《SAS数据分析开发之道 软件质量的维度》第三章通信交流3.2系统数字返回码(一)

简介: 带你读《SAS数据分析开发之道 软件质量的维度》第三章通信交流3.2系统数字返回码(一)

SAS中的虚拟返回码

对于比较熟悉第三代语言(3GL)的软件开发人员来说,前面对返回码的解释可能会显得不充分或不准确。实际上,在许多软件语言中,返回程序指令的目的是提示终止某个参数,即从子进程向父进程返回某个或某些值。在SAS中,系统生成的返回码确实会执行这个功能,然而,%RETURN宏函数造成当前运行宏的终止,但实际并不会返回任何内容。BaseSAS 中没有固有的方法用来返回宏的值。

考虑到这种限制,BaseSAS 中不能生成真正的返回码,因而需要编写返回码。通过在 SAS 宏中启用通用宏变量,信息能够有效地从子进程传递到父进程中。尽管与其他计算机语言相比,这样做的效率较低,且安全性较差,但确实发挥了它应有的作用,同时,该限制不应该妨碍 SAS 从业人员在其软件中执行返回码。

编写返回码的一个缺点是违反松耦合——通用宏变量一旦创建,所有的子进程便都可调用,而并非只是调用该宏的父进程。因此,软件必须确保所有通用宏变量定义的独特性,以避免它们之间相互影响或干扰其他程序。实现这种安全性的一个方法是将宏名称作为返回码变量名称的基础。在下面的案例中,%CHILD宏会产生&CHILDRC返回码 :

%macrochild();

%letsyscc=0;

%globalchildRC;

%letchildRC=GENERALFAILURE;


*dosomeprocess;

%if&syscc=0%then%letchildRC=;

%mend;

 

编写返回码的另一个缺点是返回码的持续存在性,它会一直存留在以前的程序或在同一 SAS 会话运行的上一项目中。例如,如果代码未将返回码初始化为默认值,那么上一个操作的值可能会继续存留在当前的运行环境中,从而影响该返回码及结 果。如前所述,在宏初始阶段将返回码设定为一种故障状态,或者仅在过程已经被证    实成功之后再指定一个有效的返回码,通过这两种方式均可以消除上述漏洞(第  11章会具体讲解

 

系统数字返回码

SAS系统生成的自动宏变量扮演着多个角色,它们能帮助我们了解 SAS运行环境及操作系统(OS,控制SAS的操作运行方式,记录性能指标。自动宏变量的子集包括描述软件性能的返回码,如特定SAS程序指令或功能的成功与失败。在执行过程中出现的警告或运行错误通常会自动地存储在返回码中。返回码一个主要的优点是,    它们能够自动驱动动态处理过程,而无须手动识别错误,这避免了 SAS从业人员费 时费力地分析日志结果以搜索出故障或证实软件的成功运行。

SAS9.4宏语言 :参考4)》SAS 9.4MacroLanguage: Reference, 4thed中涵盖了多数 SAS自动宏变量,其余的 SAS自动宏变量则出现在《SAS9.4SQL程序用户指南(3)》SAS9.4SQLProcedureUser’sGuide, 3rded)中。

数字返回码:

&SYSERR 系统错误表示最近运行过程中的错误代码,在每个边界步骤中会重置该错误代码。

&SYSCC 系统当前代码指整个SAS 工作中产生的最高错误代码,该代码在SAS 会话中不会进行重置。

&SQLRC SQL 返回码表示最近的SQL 程序指令—— 是指令而不是程序——是否被正确执行。

&SYSFILRC 系统文件返回码指FILENAME 程序指令是否被正确执行。

&SYSLIBRC 系统数据库返回码指LIBNAME 程序指令是否被准确执行。

   &SYSLCKRC 系统锁定返回码指LOCK 程序指令是否被准确执行。

   &SYSRC 系统返回码记录的是与OS 运行环境直接互动的程序指令的状态,

   如X、 SYSEXEC、SYSTASK 和WAITFOR。

   SYSRC() 尽管从技术层面来讲系统返回码是一个函数而不是一个返回码,但它返回的是最近执行的输入/ 输出(I/O)函数的状态。

&SYSERR

&SYSERR   宏变量是一个非常重要的返回码,它能显示最近执行过程的成功与失败。下面的输出结果显示的是一个成功的、创建 Final数据集的DATA步骤,由于没有出现任何警告或错误,因此,&SYSERR的值设置为“0

datafinal;

setoriginal;*datasetexists;run;

 

NOTE:Therewere1observationsreadfromthedatasetWORK.ORIGINAL.NOTE: The data set WORK.FINAL has 1 observations and 0 variables.NOTE:DATAstatementused(Totalprocesstime):

realtime             0.01seconds

cputime              0.01seconds

 

%putSYSERR:&syserr;

SYSERR:0

若以下输出中,Original数据集不存在,那么&SYSERR将设置为1012,这表示 SAS总体的错误条件 :

datafinal;

setoriginal;

ERROR:FileWORK.ORIGINAL.DATAdoesnotexist.run;

 

NOTE:TheSASSystemstoppedprocessingthisstepbecauseoferrors.


WARNING:ThedatasetWORK.FINALmaybeincomplete.Whenthisstepwasstoppedtherewere0observationsand0variables.

WARNING:DatasetWORK.FINALwasnotreplacedbecausethisstepwasstopped.

NOTE:DATAstatementused(Totalprocesstime):realtime   0.01seconds

cputime              0.01seconds

 

%putSYSERR:&syserr;

SYSERR:1012

 

&SYSERR 宏变量是只读模式,开发人员无法直接复制该变量,因此,&SYSERR通常会包含准确值,然而,通过错误的业务逻辑,可以手动将读写自动化宏变量重置为一个无效的非错误条件。&SYSERR 在每一个步骤边界之后都会进行重置,包括DATA   步骤及程序。需要特别注意的是,如果两个程序按顺序执行,在程序执行之后评估 &SYSERR值时,只能评估第二个程序的状态。因此,如果测试和调试序列化的单片 SAS代码,可能需要重复检查&SYSERR的值,以确保能够识别或分离出有故障的程序。

然而,许多特定的故障类型只有借助具体的返回码才能识别。例如,FILENAME程序指令出现了错误,&SYSERR依然是0(表示操作没有任何错误,这是因为 &SYSFILRC捕获了异常情况的信息。当 SAS 代码用于宏框架时,尤其需要利用所有相关的返回码来捕获全部的故障信息。例如,当软件遭遇错误情况T”时,是很麻烦的事情?在下面的例子中,5”被错误拼写为T,尽管宏已进行编译,但依然发生了故障 :

%macrotest;

%letsyscc=0;*requiredtoresetSYSCCanytimeitwillbeassessed;

datafinal;

%doi=1%toT;*softwaredefectinwhichTshouldhavebeen5;lengthchar&i$10;

%end;run;

%mend;

 

当该代码运行时,DATA步骤就会出现故障,日志中只会出现提示信息,而


 

 

此时,&SYSERR会显示无错误运行。只有 &SYSCC会准确捕获引起故障的语法错误 :

%test;

 

NOTE: The data set WORK.FINAL has 1 observations and 0 variables.NOTE:DATAstatementused(Totalprocesstime):

realtime             26.44seconds

cputime              0.90seconds

 

ERROR: A character operand was found in the %EVAL function or %IFconditionwhereanumericoperandisrequired.Theconditionwas:TERROR:The%TOvalueofthe%DOTloopisinvalid.

ERROR:ThemacroTESTwillstopexecuting.

 

%putSYSERR:&syserr;SYSERR:0

%putSYSCC:&syscc;

SYSCC:1012

 

该代码依然会创建数据集,但由于 LENGTH程序指令没有运行,因而没有任何变量。对于这种悲壮的故障,必须使用 &SYSCC来捕获错误,因为 &SYSERR根本不会显示这一故障。

相关文章
|
28天前
|
数据采集 机器学习/深度学习 数据可视化
构建高效数据分析系统的关键技术
【10月更文挑战第5天】构建高效数据分析系统的关键技术
37 0
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
161 4
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
【优秀python web系统毕设】基于python的全国招聘数据分析可视化系统,包括随机森林算法
本文介绍了一个基于Python的全国招聘数据分析可视化系统,该系统利用数据挖掘技术、随机森林算法和数据可视化技术,从招聘网站抓取数据,进行处理、分析和预测,帮助用户洞察招聘市场,为求职者和企业提供决策支持。
113 2
|
3月前
|
数据采集 存储 监控
数据驱动开发:如何将数据分析融入开发流程
【8月更文挑战第14天】数据驱动开发是一种高效、智能的软件开发方法论,它通过将数据分析深度融入开发流程中,实现了精准决策、提升效率和持续改进的目标。为了成功实施数据驱动开发,团队需要明确数据需求、设计合理的数据架构、集成数据收集工具、实施CI/CD流程、进行数据分析与决策支持以及建立反馈循环机制。同时,还需要应对数据质量、技术和组织与文化等挑战。通过不断努力和实践,团队可以逐步建立起完善的数据驱动开发体系,推动产品不断迭代升级和业务持续增长。
|
3月前
|
存储 数据可视化 大数据
基于Python Django的大数据招聘数据分析系统,包括数据大屏和后台管理
本文介绍了一个基于Python Django框架开发的大数据招聘数据分析系统,该系统具备后台管理功能和数据大屏展示,利用大数据技术收集和分析招聘市场趋势,帮助企业和招聘机构提高招聘效率和质量。
150 3
|
3月前
|
前端开发 Java JSON
Struts 2携手AngularJS与React:探索企业级后端与现代前端框架的完美融合之道
【8月更文挑战第31天】随着Web应用复杂性的提升,前端技术日新月异。AngularJS和React作为主流前端框架,凭借强大的数据绑定和组件化能力,显著提升了开发动态及交互式Web应用的效率。同时,Struts 2 以其出色的性能和丰富的功能,成为众多Java开发者构建企业级应用的首选后端框架。本文探讨了如何将 Struts 2 与 AngularJS 和 React 整合,以充分发挥前后端各自优势,构建更强大、灵活的 Web 应用。
55 0
|
3月前
|
SQL 数据采集 算法
【电商数据分析利器】SQL实战项目大揭秘:手把手教你构建用户行为分析系统,从数据建模到精准营销的全方位指南!
【8月更文挑战第31天】随着电商行业的快速发展,用户行为分析的重要性日益凸显。本实战项目将指导你使用 SQL 构建电商平台用户行为分析系统,涵盖数据建模、采集、处理与分析等环节。文章详细介绍了数据库设计、测试数据插入及多种行为分析方法,如购买频次统计、商品销售排名、用户活跃时间段分析和留存率计算,帮助电商企业深入了解用户行为并优化业务策略。通过这些步骤,你将掌握利用 SQL 进行大数据分析的关键技术。
159 0
|
3月前
|
数据可视化 安全 前端开发
基于Django的美团药品数据分析与可视化系统,有多用户功能,可增删改查数据
本文介绍了一个基于Django框架开发的美团药品数据分析与可视化系统,该系统具备多用户功能,支持数据的增删改查操作,并采用MySQL、pandas、echarts和bootstrap技术栈,为用户提供了一个高效、安全且实用的药品数据管理和分析平台。
基于Django的美团药品数据分析与可视化系统,有多用户功能,可增删改查数据
|
3月前
|
数据采集 数据可视化 数据挖掘
基于Django的数据分析可视化系统,有后台,有增删改查,实现多用户登录
本文介绍了一个基于Django框架开发的今日头条数据分析可视化系统,该系统具备后台管理、增删改查功能以及多用户登录,利用数据可视化技术为新闻媒体行业提供数据管理和决策支持。
基于Django的数据分析可视化系统,有后台,有增删改查,实现多用户登录
|
3月前
|
机器学习/深度学习 算法 数据可视化
基于Python flask的豆瓣电影数据分析可视化系统,功能多,LSTM算法+注意力机制实现情感分析,准确率高达85%
本文介绍了一个基于Python Flask框架的豆瓣电影数据分析可视化系统,该系统集成了LSTM算法和注意力机制进行情感分析,准确率高达85%,提供了多样化的数据分析和情感识别功能,旨在帮助用户深入理解电影市场和观众喜好。
124 0