SET
ステートメントのNOBS=
オプションを使用すると、データセットに少なくとも1つの観察があることを確認する簡単な方法があります。
data want ;
if 0=_nobs then output;
set want nobs=_nobs;
run;
注データセットが大きく、あなたが、あなたは条件付きでデータのステップを生成するために、いくつかの方法を使用する可能性があるデータを再書き込みする必要がありますする必要はなかった場合。たとえば、自動マクロ変数SQLOBS
をテストし、0の場合はデータステップを生成します。この場合、既にあなたがしているので、nobをテストする必要はありません。また、データセット名をハードコードする代わりに、自動マクロ変数SYSLAST
を使用することもできます。これにCALL EXECUTEを使うこともできますが、関数IFC()
を使うこともできます。すべてのおそらく最高の
%sysfunc(dequote(
%sysfunc(ifc(0=&sqlobs,'data &syslast;output;set &syslast;run;',''))
))
MODIFY
ステートメントを使用し、条件付きでOUTPUT
ステートメントを実行します。SQLOBS
マクロ変数をテストできます。
data &syslast ;
if &sqlobs=0 then output;
modify &syslast ;
stop;
run;
またはNOBS=
オプションでMODIFYステートメントを使用できます。
data &syslast ;
if 0=_nobs then output;
modify &syslast nobs=_nobs;
stop;
run;
すべてのSQLソリューション
あなたは変数名の少なくとも一つ、あなたが使用することができますを知っているし、SQL INSERT文場合。
insert into &syslast (varname) values (null);
したがって、データセット名、観測数、および変数名を入力として使用する単純なマクロを作成することがあります。
%macro ifzeronull(dsn,nobs,avar);
%if &nobs=0 %then %do;
insert into &dsn (&avar) values (null);
%end;
%mend ;
次に、同じPROC SQLコールに留まり、条件付きで観測を追加することができます。
proc sql;
create table want as
select * from sashelp.class
where age=19
;
%ifzeronull(&syslast,&sqlobs,name)
quit;
出典
2017-04-04 17:10:42
Tom
優れたソリューション。ありがとうございました! – 99Valk
あなたがすでに観測値がないことが分かっているなら、IF 0のトリックは必要ありません。SETステートメントの前にOUTPUTステートメントを移動するだけで、1つの観察が得られます。 – Tom
はい、良い点は確かです... – Joe