如果某个条件不满足,我需要让 SAS 触发错误 我尝试使用中止返回 n、中止异常结束等。但他们似乎都 断开整个会话的连接,我只想得到一个错误,例如 与语法等。
它是一个 sas 属性图,只能在带有提示的交互模式下从 SAS-EG 运行
我的代码:
DATA _NULL_;
IF prxmatch("/^TBDLZLd{4}_[A-Z]/",&tablename_in) eq 0 then do;
put "error table name &tablename_in does not match";
ABORT RETURN 15;
END;
RUN;
有什么建议吗?
使用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;
从帮助:
CANCEL
会导致已提交语句的执行被取消。 操作取决于操作方法。
批处理模式和非交互模式
- 终止整个 SAS 程序和 SAS 系统。
- 将错误消息写入 SAS 日志。
窗口环境和交互线模式
- 仅清除当前提交的程序。
- 不影响其他后续提交的程序。
- 将错误写入 SAS 日志。
工作区服务器和存储进程服务器
- 仅清除当前提交的程序。
- 不影响其他后续提交调用。
- 将错误消息写入 SAS 日志。
SAS IntrNet 应用服务器
- 为每个请求创建单独的执行并提交 请求代码。请求代码中的 CANCEL 参数清除当前 已提交代码,但不会终止执行或 SAS 会话。
您可以尝试使用:
put 'ERROR:' '/*customize error text here*/';
如果要停止执行数据步骤,可以使用stop
语句,例如:
DATA _NULL_;
IF prxmatch("/^TBDLZLd{4}_[A-Z]/",&tablename_in) eq 0 then do;
put 'ERROR:' "table name &tablename_in" does not match;
stop;
END;
RUN;
如果您有宏并且希望在宏执行步骤中收到错误消息,则可以使用%put
:
%put ERROR: /*customize error text here*/;
谢谢@Tom
请注意,将单词 ERROR(
put ‘ERR’ ‘OR:’...
( 分成两部分的"技巧"仅在您对日志进行愚蠢的错误搜索时才需要。日志中的正常 SAS 错误消息始终显示在行首。例如,SAS/Studio 不会错误地将包含 ERROR 的程序行标记为实际错误。
谢谢@MichaelKersten
多行笔记,警告和错误的另一个巧妙技巧是 将第二行和连续行的":"替换为"-"。 例:
%put WARNING: first line of warning; %put WARNING- second line of warning;