2016-08-17 7 views
2

私は、このような今、私はこのデータセットを印刷するのprocレポートを使用したいのprocレポートの印刷ヌルデータセット

data a; 
if 0; 
run; 

としてヌルデータセットを持っています。もちろん、レポートには何も表示されませんが、レポートの1つの文に「これはヌルデータセットです」と表示されます。何か案は?おかげさまで

答えて

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; 

obsをチェックして、すべてのvarsに欠損があるobsを追加します。このステップでは、すべてのクラスから読み取られることはありません。

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

関連する問題