SAS调试技巧

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

数据错误:数据错误是指数据不适合当初定义的数据格式,就会出现数据报错。例如定义了变量为数值型,但是实际使用字符型,这时候就会报错。

例子:数据类型错误

相关文档
最新文档