我有一个空的数据集,如PROC报表打印空数据集
data a;
if 0;
run;
现在我希望用PROC报告打印此数据集。当然,报告中没有任何内容,但我希望报告中的一句话说:“这是一个空数据集”。有任何想法吗? 谢谢。
我有一个空的数据集,如PROC报表打印空数据集
data a;
if 0;
run;
现在我希望用PROC报告打印此数据集。当然,报告中没有任何内容,但我希望报告中的一句话说:“这是一个空数据集”。有任何想法吗? 谢谢。
您可以先测试数据集中是否有任何观察值。如果有意见,然后用数据集,否则使用虚拟数据集,看起来像这样和打印:
data use_this_if_no_obs;
msg = 'It is a null dataset';
run;
有很多的方法来测试数据集,以查看它们是否包含任何意见或没有。我个人最喜欢的是在这里找到的%nobs宏:https://stackoverflow.com/a/5665758/214994(除了我的回答,还有几种替代方法可供选择,或者执行谷歌搜索)。
使用这个%nobs
宏,我们就可以决定一个单一的代码行中使用的数据集:
%let ds = %sysfunc(ifc(%nobs(iDs=sashelp.class) eq 0, use_this_if_no_obs, sashelp.class));
proc print data=&ds;
run;
这里的展示备用结局一些代码:
data for_testing_only;
if 0;
run;
%let ds = %sysfunc(ifc(%nobs(iDs=for_testing_only) eq 0, use_this_if_no_obs, sashelp.class));
proc print data=&ds;
run;
我用proc print
以简化示例,但您可以根据需要将其调整为使用proc report
。
对于没有数据报告,您不需要知道数据中有多少观察值就是没有数据。这个例子显示了我将如何处理这个问题。
用零obs创建示例数据。
data class;
stop;
set sashelp.class;
run;
检查没有障碍物,并添加一个障碍物在所有的瓦尔上缺少。请注意,在这一步中没有观察到每一次都从课堂上读取。
data class;
if eof then output;
stop;
modify class end=eof;
run;
使报告
proc report data=class missing;
column _all_;
define _all_/display;
define name/order;
compute before name;
retain_name=name;
endcomp;
compute after;
if not missing(retain_name) then l=0;
else l=40;
msg = 'No data for this report';
line msg $varying. l;
endcomp;
run;
谢谢。它非常有用。 – Wayne
非常感谢您! – Wayne