标签:style blog color 使用 os strong 数据 io
SAS Program的错误主要有三类:
如何写一个高效的SAS Program:
尽可能写易读的代码;(每一句话一行、使用缩进排版方式、多使用注释)
检查语法错误的方法
1 OPTIONS OBS=0 NOREPLACE; 2 /*1) OBS=0告诉SAS不要导入任何数据 3 2)NOREPLACE选项告诉SAS不要用现有SAS数据集代替空的*/ 4 确定无语法错误后,可将OBS=0改成OBS=MAX即正常使用。
Missing Semicolon引起的错误(DATASTMTCHK系统选项)
(若用户丢了分号,则SAS将两句合并在一起读,从而产生puzzling的提示信息)
1 OPTIONS DATASTMTCHK=ALLKEYWORDS:/*命令SAS所有的关键词都不能作为数据集名*/ 2 DATA toads /*漏了一个分号*/ 3 INFILE ‘C:\MyRawData\ToadJump.dat‘; 4 INPUT ToadName $ Weight Jump1 Jump2 Jump3; 5 RUN; 6 7 【日志提示】:ERROR :INFILE is not allowed in the DATA statement when option DATASTMTCHK=ALLKEYWORDS. 8 9 【解释】DATASMTCHK system options,可控制SAS在DATA步中可用作SAS数据集名。该选项默认MERGE,RETAIN,SET或UPDATE都不能作为数据集的名字.
Note: INPUT Statement Reached Past the End of the Line
【解决办法】
1 INFILE ‘C:\MyRawData\Toadjmp2.dat‘ MISSOVER; 2 /*MISSOVER option命令SAS在读入数据时,若改行数据已读完,而后面仍有变量没有读入,则给剩余的变量分配missing values*/
【可能错误原因】
Note: Lost Card
该提示说明SAS在expecting读入下一行数据,然而却找不到这行数据。例如,每个观测需读入2行数据,则SAS数据集应该有偶数行数据,若只有奇数行,则日志会提示Lost Card信息。
Note: Invalid Data
读入的数据域INPUT语句不符合,而导致SAS不能从原始数据中读入数据。这是SAS可能会做出两种反映:分配该变量missing values;或者在日志中打印出一个类似于probliematic观测的提示。
【可能错误原因】
【备注】:1. 当SAS遇到unprintable(例如,16进制格式等),也会在日志中出现“invalid data”的提示;
2. 有时候用户需要运行此程序,为了保证_ERROR_=0,采用??——format modifier将此变量变为missing value:
1 INPUT IDNumber ?? 1-5 Name $ 6-18 Class $ 20-21 Q1 22 Q2 23;
Note: Numeric Values have been converted to character, Vice Versa
若用户把numeric变量与character变量弄混时,SAS就自动尝试将numeric转化为character,或将character转化为numeric,这种情况就会在日志中体现出来。
【Converting Variables】
就行INPUT语句中使用informat一样,INPUT函数中使用informat,且informat必须是用户需要converting to的numeric data type.
就行PUT语句中使用format一样,PUT函数中使用format,且format必须是用户需要converting from的numeric data type.
错误类型:DATA步的结果是错的,但是并没有提示Error Message
事实上,在使用PUT语句时,并未与FILE语句一起写入日志。为解决这一类型为题,应采用PUTLOG语句,功能与PUT语句一样,但是不管是否与FILE语句一起使用,都会被写入日志。
1 *Keep only students with mean below 70; 2 DATA Lowscore; 3 INFILE ‘C:\MyRawData\Class.dat‘; 4 INPUT Name $ Score1 Score2 Score3 Homework; 5 Homework = Homework *2; 6 AverageScore=Mean(Score1+Score2+Score3+Homework); 7 PUTLOG Name= Score1= Score2= Score3= Homework=;/PUTLOG _ALL_;/*会输出IF语句之前各变量的值*/ 8 IF AverageScore<70; 9 RUN;
Error: Statment Is Not Valid
说明SAS can‘t understand the statement at all.
【可能原因】
Error: Variable is Uninitalized或Error:Variable Not Found
Error: Variable is Uninitalized:出现在DATA步内,说明用户需要初始化变量,然后重新执行此program;
Error:Variable Not Found:出现在PROC步,若错误出现在VAR上,则SAS会提示该信息,然后不执行程序;若错误出现在label上,则SAS会提示警告,并继续执行。
【可能原因】
【SAS BASE】Debuging SAS Programs,布布扣,bubuko.com
【SAS BASE】Debuging SAS Programs
标签:style blog color 使用 os strong 数据 io
原文地址:http://www.cnblogs.com/chenyn68/p/3869071.html