我有一個空的數據集,如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