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

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

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

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

&SYSLCKRC

自动宏变量 &SYSLCKRC能显示最近 LOCK程序指令的顺利运行,LOCK序指令以往用于显示数据集未被使用,仅能通过某个程序打开。由于   LOCK   程序指令在 BaseSAS软件中的显示缺乏完整性,且通常会生成无效的结果,因此,LOCK程序指令及&SYSLCKRC应该只能用在SAS/SHARE环境中,但仅用于说明遗留的 SAS代码。“互斥和信号量”部分会介绍一个替代 LOCK功能的方法。

以下内容显示的是 LOCK程序指令的传统用法——获取PERM.Final数据集上的排他文件锁定,从而使其他程序或用户(理论上)无法获取该数据集 :

dataperm.final;

lengthchar$10;run;

 

NOTE:ThedatasetPERM.FINALhas1observationsand1variables.NOTE:DATAstatementused(Totalprocesstime):

realtime             0.01seconds

cputime               0.01seconds

 

lockperm.final;

 

NOTE:PERM.FINAL.DATAisnowlockedforexclusiveaccessbyyou.

 

%macrotest;

%if&SYSLCKRC=0%then%do;

procsortdata=perm.final;

bychar;run;

%end;

lockPERM.finalclear;

%mend;

 

%test;

 

NOTE:Therewere1observationsreadfromthedatasetPERM.FINAL.NOTE:ThedatasetPERM.FINALhas1observationsand1variables.NOTE:PROCEDURESORTused(Totalprocesstime):

realtime             0.14seconds

cputime               0.01seconds

 

NOTE:PERM.FINAL.DATAisnolongerlockedbyyou.

 

在许多情况下,LOCK   程序指令确实能够成功地锁定引用的数据集,阻止其他用户或 SAS会话获取该数据集。然而,在某些情况下,即便数据集被另一个SAS会话独家锁定,但    LOCK    程序指令也会产生一个值为“0”的&SYSLCKRC。假设出现不一致的情况,则不推荐使用LOCK 程序指令。

 

&SYSLIBRC

自动宏变量 &SYSLIBRC显示的是最近的 LIBNAME程序指令的成败,如果LIBNAME指派一个有效的文件库,则&SYSLIBRC显示为“0”。LIBNAME的一个动态用途是为运行的 SAS程序的逻辑位置指定一个文件库。例如,如果 SAS程序 C:\SAS\temp\test.sas在 SAS 显示管理系统中运行,那么开发人员可能希望将 SAS文件库CURRENT 指派到 C:\SAS\temp :

*mustbesavedtoanamedSASprogramtoexecute;

%letsyscc=0;

%letpath=%sysget(SAS_EXECFILEPATH);


%letpath=%substr(&path,1,%length(&path)-%length(%scan(&path,-1,\)));

libnamecurrent"&path";

%putSYSLIBRC:&SYSLIBRC;

%putSYSCC:&syscc;

 

以下代码使用的是CURRENT文件库,由于LIBNAME程序指令运行正确,因此,&SYSLIBRC的值设置为“0”:

libnamecurrent"&path";

NOTE:LibrefCURRENTwassuccessfullyassignedasfollows:Engine:V9

PhysicalName:C:\SAS\temp

%putSYSLIBRC:&SYSLIBRC;SYSLIBRC:0

%putSYSCC:&syscc;

SYSCC:0

 

但是,如果 LIBNAME程序指令错误地引用了&PATCH,而非 &PATH,SAS会产生一个警告,因为它无法解析宏变量 &PATCH。宏变量 &SYSCC会检测并显示这一警告,警告代码显示为“4”。另外,该错误会导致LIBNAME程序指令的运行故障, &SYSLIBRC 的值为负数便反映出程序指令运行故障。

libnamecurrent"&patch";

WARNING:ApparentsymbolicreferencePATCHnotresolved.NOTE:LibraryCURRENTdoesnotexist.

%putSYSLIBRC:&SYSLIBRC;SYSLIBRC:-70008

%putSYSCC:&syscc;

SYSCC:4

 

从编程方式来讲,可以借助几个方法检测这些故障。例如,可以使用 %SYMEXIST评估宏变量 &PATH,以确定它是否丢失,或者使用 %LENGTH评估 &PATH是否有一个零字符长度。继LIBNAME程序指令之后,还可以验证 &SYSCC的值以避免在出现警告或“运行错误”时,后续代码继续执行。然而,最可靠的方法是在LIBNAME程序指令之后评估&SYSLIBRC,如果值不是“0”,则需终止程序或跳过后续需要引用 CURRENT 文件库的程序。

例如,C:\neverland文件目录在以下代码运行时不存在,&SYSLIBRC的值会显示为负数,反映出异常情况。由于这是一个异常情况,而不是出现了“运行时错误因此,&SYSCC依然显示为“0

%letsyscc=0;

libnamecurrent  "c:\neverland";WARNING:LibraryCURRENTdoesnotexist.

NOTE:LibrefCURRENTwassuccessfullyassignedasfollows:Engine:V9

PhysicalName:c:\neverland

%putSYSCC:&syscc;SYSCC:0

%putSYSLIBRC:&syslibrc;

SYSLIBRC:-70008

 

在稳健的设计中,&SYSLIBRC值应在 LIBNAME程序指令之后立即进行评估,其他的异常情况处理应该监测&SYSCC 和整个运行过程中其他相关自动宏变量。

 

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

相关文章
找优质的直播软件开发公司不用担心系统架构问题
文章标题中提到的系统架构问题,在直播软件开发过程中也是非常重要的一部分。为什么这么说呢?我们举个简单的例子,一个施工队盖楼肯定先要把整体的框架用钢筋扎好,然后再进行下一步的工作。开发直播软件也是一样,先把整体的架构设计好罗列出来,再把其中的功能挨个添加进去。
902 0
SAS进阶《深入分析SAS》之数据汇总和展现
SAS进阶《深入分析SAS》之数据汇总和展现 1. 通过Print过程制作报表 proc print <data=数据集>; run; 选项: obs=修改观测序号列标签 noobs不显示观测序列号 id语句在输出中取代观测序列 var选择输出的变量 where语句选择输出的观测 总结如下: proc print data=数据集<选项&g
1166 0
SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理
SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理 1. SAS变量操作的常用语句 ASSIGNMENT 创建或修改变量 SUM 累加变量或表达式 KEEP 规定在数据集中保留的变量 DROP 规定在数据集中删除的变量 ARRAY 定义一个数组 RENAME
1389 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. 局部宏变量:一般程序定义的为宏变量。 全局
1675 0
SAS进阶《深入解析SAS》之SAS数据挖掘的一般流程
SAS进阶《深入解析SAS》之SAS数据挖掘的一般流程 1. 所谓数据挖掘,是指通过对大量的数据进行选择、探索与建模,来揭示包含在数据中以前不为人所知的模式或规律,从而为商业活动或科学研究提供帮助和服务。 2. 数据挖掘重要的两个类别:有监督分析(SupervisedAnalysis),无监督分析(UnsupervisedAnalysis)。 有监督分析属于目标
1072 0
472
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载