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

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

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

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

&SYSRC

&SYSRC自动宏变量能够记录与OS 运行环境直接进行互动的程序指令的状态,如X、SYSEXEC、SYSTASK及 WAITFOR。尽管本书中未详细介绍, 但 &SYSRC在这些程序指令成功完成之后会显示一个“0”值。由于&SYSRC在后续X、SYSEXEC、 SYSTASK 或类似程序指令运行之前不能进行重置,而且该宏变量是可读写的,因此,在评估之前需要手动重置该变量的值,这一点与 &SYSCC的初始化类似。

以下内容说明的是Windows运行环境中 程序指令获得初步成功,该指令的目的是将当前文件夹的内容输入到文本文件Dir.txt,随后是一个因DOS命令“DIR”错误拼写为“DIRT”而造成的故障:

%letsysrc=0;

%letsyscc=0;data_null_;

x"dir>dir.txt";run;

 

NOTE:DATAstatementused(Totalprocesstime):realtime   1.66seconds

cputime               0.07seconds


%putSYSRC:&sysrc;SYSRC:0

%putSYSCC:&syscc;

SYSCC:0

data_null_;

x"dirt>dir.txt"

!;

run;

 

NOTE:DATAstatementused(Totalprocesstime):realtime   0.77seconds

cputime               0.07seconds

 

%putSYSRC:&sysrc;SYSRC:9009

%putSYSCC:&syscc;

SYSCC:0

 

&SYSCC返回码不受 &SYSRC值的影响,因此,必须通过评估 &SYSRC处理这些程序指令中的异常情况。&SYSRC宏变量在第 12 章“自动化”的“批量异常情况处理”部分讲述,它用于异常情况处理框架中显示 SYSTASK 程序指令的顺利运行。

 

SYSRC()

不要将SYSRC() 函数与&SYSRC自动宏变量混淆,它返回的是最近运行的输入/输出(I/O)函数的完成状态。由于 I/O函数通常是在%SYSFUNC宏函数中执行的,因此,SYSRC() 值可被保存为一个宏变量,并且可用于驱动异常情况处理的程序流。

以下代码及输出信息显示的是 Final数据集中变量的数量 :

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

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

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

 

%putVARS:&vars;VARS:1


然而,由于 OPEN函数需要 PERM.Final 数据集的共享锁定,因此,如果某个独立的用户或 SAS 会话独自锁定该数据集,该代码便会出现故障 :

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

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

WARNING:Argument1tofunctionATTRNreferencedbythe%SYSFUNCor%QSYSFUNCmacrofunctionisoutofrange.

NOTE:Mathematicaloperationscouldnotbeperformedduring%SYSFUNCfunctionexecution.Theresultoftheoperationshavebeensettoamissingvalue.

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

 

%putVARS:&vars;VARS:

若 OPEN发生故障,&DSID便不会被赋值, 因此,ATTRN函数随后也会发生故障。补救措施是在执行类似 ATTRN或 CLOSE等后续相关动作之前,使用SYSRC函数测试I/O函数的返回码(与OPEN相似),由于I/O函数正常运行时返回的是“0”,因此,以下代码仅在OPEN顺利运行的前提下执行ATTRN:

%macrotest;

%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;

%putVARS:&vars;

%mend; 

%test;

实现类似程序控制的另一个方法是在OPEN函数之后立即测试&DSID,如果值是“0”(表示打开该数据集出现故障),则终止该过程。

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

相关文章
SAS进阶《深入分析SAS》之数据汇总和展现
SAS进阶《深入分析SAS》之数据汇总和展现 1. 通过Print过程制作报表 proc print <data=数据集>; run; 选项: obs=修改观测序号列标签 noobs不显示观测序列号 id语句在输出中取代观测序列 var选择输出的变量 where语句选择输出的观测 总结如下: proc print data=数据集<选项&g
1164 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
472
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载