我有以下代码:
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似乎无法捕获,可能是因为它尚未在该点执行。