我有一个空数据集,例如
data a;
if 0;
run;
现在我希望使用proc报告来打印此数据集。当然,报告中没有任何内容,但我希望报告中的一句话说“它是一个空数据集”。有任何想法吗? 感谢。
答案 0 :(得分:3)
您可以先测试数据集中是否有任何观察结果。如果有观察结果,则使用数据集,否则使用看起来像这样的虚拟数据集并打印出来:
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
。
答案 1 :(得分:0)
对于无数据报告,您不需要知道数据中有多少观察结果,只有没有。这个例子说明了我将如何处理这个问题。
创建零障碍的示例数据。
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;