SAS调试技巧
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SAS调试技巧
对于每一个编程者来说,都会碰到BUG问题,一个有经验的编程者则能尽量避免错误发生,同时,在碰到问题,能够有效利用软件的相关调试功能,及时发现、定位和解决问题。对于SAS来说,专门讲调试的书籍很少,通过这章内容,希望使读者能够掌握基本的SAS 的调试技巧。
SAS错误类型概述
SAS错误类型包括:语法错、词义错、运行错、数据错和宏相关错误。SAS在编译和运行过程中都执行错误检查,在每个语句执行之前编译各步时候SAS可以发现语法错、词义错和部分宏错误,在程序执行过程中可以发现其他错误。
语法错误:语法错误(Syntax errors)是指程序语句不符合SAS语言规范,可能是关键字错误、双引号不匹配,缺少分号等。
SAS在发现语法错误时候,首先它会试图使用一种“错误纠正”方法去纠正这个错误,如果能纠正,SAS会按照纠正后的程序执行,如果不能纠正,它就会报错,停止运行并在LOG窗口中显示。
注意:SAS纠正后,在LOG窗口中会显示警告(W ARNING),并将纠正后结果显示。需要特别注意的,SAS纠正不一定是当初想要的结果,读者在运行SAS程序的时候一定要非常小心,即使程序能正常运行,一定要看LOG窗口中有无警告信息,有的话,要看警告信息内容进行相应的判断。
例子:语法错误,SAS自动纠错
date a;
set sasuser.admit;
在SAS的LOG窗口可以看到
25 date t;
----
14
WARNING 14-169: 假定符号 DATA 错拼为 date。
26 set sasuser.admit;
27 run;
NOTE: 从数据集 SASUSER.ADMIT. 读取了 21 个观测
NOTE: 数据集 WORK.T 有 21 个观测和 9 个变量。
例子:语法错误,缺少分号,SAS报错
data t
set sasuser.admit;
run;
在SAS的LOG窗口可以看到
28 data t
29 set sasuser.admit;
---
56
ERROR 56-185: 使用 DATASTMTCHK=COREKEYWORDS 选项时,在 DATA 语句中不允许使用 SET。
请在 DATA 语句中查看是否缺失分号,或使用 DATASTMTCHK=NONE。
30 run;
NOTE: 由于出错,SAS 系统停止处理该步。
词义错误:词义错误是指程序语句中每个元素的格式是正确的,但用法无效。词义错误包括变量名称拼写错误、数组引用错误、数据集引用错误等。
例如:引用的逻辑库不存在
data test;
set mylib.student;
run;
在SAS的LOG窗口可以看到
4 data test;
5 set mylib.student;
ERROR: 没有分配逻辑库引用名 MYLIB。
6run;
运行错误:运行错误是指SAS在执行程序时候碰到数值错误,大部分运行错误SAS会在LOG 窗口显示警告信息,但是允许程序继续执行,LOG窗口一般都会注解出行号和列号,以及相应的错误信息。
运行错误一般包括以下情况:
●函数的参数值无效;
●非法的数学运算(例如,0为除数);
●对于使用BY组分析处理时候,没有正确的排序;
●引用超出数组边界的元素;
●INPUT函数中数据类型不匹配;
●在打开文件和关闭文件时候出现错误;
●资源不足问题(例如磁盘空间不足,内存不足)
例如:引用的逻辑库不存在
data test ;
input Item $ 1-14 TotalCost 15-20
UnitsOnHand 21-23;
UnitCost=TotalCost/UnitsOnHand;
datalines;
Hammers 440 55
Nylon cord 35 0
Ceiling fans 1155 30
;
run;
在SAS的LOG窗口
19 data test ;
20 input Item $ 1-14 TotalCost 15-20
21 UnitsOnHand 21-23;
22 UnitCost=TotalCost/UnitsOnHand;
23 datalines;
NOTE: 检测到0 为除数,位置: 行22 列22。
RULE: ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+- 25 Nylon cord 35 0
Item=Nylon cord TotalCost=35 UnitsOnHand=0 UnitCost=. _ERROR_=1 _N_=2
NOTE: 在以下位置无法执行算术运算。运算结果已设为缺失值。
每个位置的指定方式: (次数)(行:列)。
1,位置: 22:22。
NOTE: 数据集WORK.DATA2 有3 个观测和4 个变量。
27 ;
28 run;
数据错误:数据错误是指数据不适合当初定义的数据格式,就会出现数据报错。例如定义了变量为数值型,但是实际使用字符型,这时候就会报错。
例子:数据类型错误