gpt4 book ai didi

error-handling - sas 宏中的错误处理

转载 作者:行者123 更新时间:2023-12-02 02:57:43 25 4
gpt4 key购买 nike

我正在编写一个简单的宏来计算表中所有列中的不同值。我需要包含一个错误处理程序,如果在第一个表中找到某个列但在第二个表中没有找到某个列,它会显示错误信息并继续进一步执行宏。

例如,可以说,我编写了一个宏来计算任何数据集col1、col2、col3的不同值,并且

table1 有列(col1、col2、col3)但,table2 有列 (col2, col3) - 因此会出现 table2 中不存在 col1 的错误。我需要一种方法来处理这个错误。

最佳答案

喜欢 SAS,但我讨厌其中的错误处理(因为它几乎不存在,而且几乎总是需要使用宏代码来完成......恶心)。

最好的办法是在执行代码之前检查是否有任何条件,如果不满足任何要求,那么您的一些选择是:

  • 在运行步骤之前使用描述性消息中止。我发现 %abort cancel 语句是在批处理和交互式 session 中停止代码的最好方法。
  • 跳过使用 %if %then 语句会失败的步骤。
  • 让代码妥善解决问题并继续(如果可能的话)。这可以通过有条件地运行通常不属于常规作业流程的附加代码来完成。
  • 是否运行它并重置错误条件(即将 &syserr 设置为零)?我从来没有真正尝试过这个选项,所以即使它可行,我也不能 100% 确定它是如何工作的。

在你的情况下,我想你的代码将类似于:

data have1;
set sashelp.class;
run;

data have2;
set sashelp.class(drop=age);
run;

/* GET A LIST OF COLUMNS IN EACH TABLE */
proc sql noprint;
create table column_list as
select memname, name
from dictionary.columns
where libname = 'WORK'
and memname in ('HAVE1','HAVE2')
order by name
;
quit;

/* CREATE A DATASET CONTAINING COLUMNS THAT ONLY EXISTS IN ONE OF THE TWO TABLES */
/* YOUR LOGIC MAY DIFFER */
data diff_columns;
set column_list;
by name;
if first.name and last.name then do;
output;
end;
run;

%macro error_handling;
%if %nobs(iDs=diff_columns) %then %do;
%put ERROR: TABLES CONTAINED DIFFERENT COLUMNS.;
/* CHOOSE HOW YOU WANT TO HANDLE IT HERE */
%end;
%mend;
%error_handling;

一些事情...我使用了一个名为 %nobs() 的宏来帮助我确定 diff_columns 数据集中是否存在任何观察结果。 %nobs 有许多不同的版本,here is a selection .

如果您决定让 SAS 结束而不运行任何更多代码,下面显示了一个很好的宏。如果以批处理模式运行,它将退出 SAS,但如果您以交互方式运行,它将仅取消剩余的提交代码而不离开 SAS:

%macro stop_sas;
%if "&sysenv" eq "FORE" %then %do;
%abort cancel;
%end;
%else %do;
endsas;
%end;
%mend;

如果您希望在 SAS 遇到任何错误后阻止日志变得困惑,请考虑使用 %runquit 宏。看起来像这样,还有使用说明can be found here :

%macro runquit;
; run; quit;
%if &syserr %then %abort cancel;
%mend;

SAS 中的错误处理是一件相当困惑的事情,虽然这为您提供了一些统计信息,但我确信这个列表并不全面。我建议尝试上面列出的几种不同方法,然后选择最适合您的方法...

关于error-handling - sas 宏中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33412163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com