2016-08-17 101 views
2

我有一个空的数据集,如PROC报表打印空数据集

data a; 
if 0; 
run; 

现在我希望用PROC报告打印此数据集。当然,报告中没有任何内容,但我希望报告中的一句话说:“这是一个空数据集”。有任何想法吗? 谢谢。

回答

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

+0

非常感谢您! – Wayne

0

对于没有数据报告,您不需要知道数据中有多少观察值就是没有数据。这个例子显示了我将如何处理这个问题。

用零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; 
+0

谢谢。它非常有用。 – Wayne