Syserr宏变量错误地为零?

时间:2014-04-21 20:48:48

标签: sas

我有以下代码:

data want;
set &dsetlist.;
run;
%put SYSERROR: &syserr.;

宏变量dsetlist是一个数据集视图列表,除其他外,它指定某些变量的长度,以防止在视图堆叠在一起时发生截断。

如果我错误地指定了这个长度,我会收到一个警告:指定了多个长度......

我希望在我的日志中看到以下内容:

data want;
set have1 have2 ... haven;
run;
WARNING: multiple lengths were specified...
NOTE: view have1 used
NOTE: view have2 used
...
NOTE: view haven used
SYSERROR: 4

然而,不幸的是,尽管有警告,但SYSERROR反而为0。

我唯一想到的是,每个使用过的视图都会覆盖syserror,而最后一个视图在没有错误或警告的情况下运行时syserror = 0?如果是这样的话,我怎么能解决这个问题?

-

编辑:可重复

data have1;
stacked = "Y";
run;
data have2;
stacked = "NO";
run;

data view1/view=view1;
length stacked $1.;
set have1;
run;
data view2/view=view2;
length stacked $1.;
set have2;
run;

data want;
set view1 view2;
run;
%put SYSERROR: &syserr.;

如果我在转录中犯了任何错误,请道歉。这里不能c / p。

如果我要将最后一个数据集更改为

data want;
length stacked $1.;
set have1 have2;
run;
%put SYSERROR: &syserr.;

这确实会给我我的期望,但由于实际的datastep视图不仅仅是改变长度,所以这并不理想。此外,数据想要段不会返回错误也就不足为奇了;而是在视图中发生了截断...但是在视图声明之后通过检查syserr似乎无法捕获,可能是因为它尚未在该点执行。

1 个答案:

答案 0 :(得分:2)

查看SAS Docs中的VARLENCHK选项。尝试将其设置为option varlenchk=error - 这可能会触发SYSERR标记为您想要的标记。