如果不满足某个条件,我需要让 SAS 触发错误我曾尝试使用 abort return n、abort abend 等。语法等
它是一个 SAS 程序,只能在带有提示的交互模式下从 SAS-EG 运行
我的代码:
DATA _NULL_;
IF prxmatch("/^TBDLZL\d{4}_[A-Z]/",&tablename_in) eq 0 then do;
put "error table name &tablename_in does not match";
ABORT RETURN 15;
END;
RUN;
Run Code Online (Sandbox Code Playgroud)
有什么建议 ?
您可以尝试使用:
put 'ERROR:' '/*customize error text here*/';
Run Code Online (Sandbox Code Playgroud)
如果要停止执行数据步骤,可以使用stop
语句,例如:
DATA _NULL_;
IF prxmatch("/^TBDLZL\d{4}_[A-Z]/",&tablename_in) eq 0 then do;
put 'ERROR:' "table name &tablename_in" does not match;
stop;
END;
RUN;
Run Code Online (Sandbox Code Playgroud)
如果您有宏并且想在宏执行步骤中获得错误消息,您可以使用%put
:
%put ERROR: /*customize error text here*/;
Run Code Online (Sandbox Code Playgroud)
谢谢@汤姆
请注意,将 ERROR(
put ‘ERR’ ‘OR:’...
)一词分成两部分的“技巧”仅在您对日志使用愚蠢的错误搜索时才需要。日志中的正常 SAS 错误消息始终出现在行首。例如,SAS/Studio 不会错误地标记包含 ERROR 的程序行,就好像它们是实际错误一样。
谢谢@MichaelKersten
多行注释、警告和错误的另一个巧妙技巧是将第二行和连续行的“:”替换为“-”。例子:
Run Code Online (Sandbox Code Playgroud)%put WARNING: first line of warning; %put WARNING- second line of warning;
使用ABORT CANCEL
语句。数据步骤将停止运行,并且不会处理提交代码中的以下步骤。
例如:
data _null_;
set sashelp.class;
if name = "John" then do;
put 'ERR' 'OR: My error message';
abort cancel;
end;
run;
* This step is not done due to earlier ABORT CANCEL;
data _null_;
set sashelp.class;
where name like 'J%';
run;
Run Code Online (Sandbox Code Playgroud)
来自帮助:
CANCEL
导致已提交语句的执行被取消。操作取决于操作方法。
批处理模式和非交互模式
- 终止整个 SAS 程序和 SAS 系统。
- 将错误消息写入 SAS 日志。
窗口环境和交互线模式
- 只清除当前提交的程序。
- 不影响其他后续提交的程序。
- 将错误写入 SAS 日志。
工作区服务器和存储过程服务器
- 只清除当前提交的程序。
- 不影响其他后续提交调用。
- 将错误消息写入 SAS 日志。
SAS IntrNet 应用服务器
- 为每个请求创建一个单独的执行并提交请求代码。请求代码中的 CANCEL 参数会清除当前提交的代码,但不会终止执行或 SAS 会话。
归档时间: |
|
查看次数: |
477 次 |
最近记录: |