SASデータセットの最初の10回と最後の10回の観測結果だけを印刷する方法を探しています。私はこれを行う方法がありますか?SASで最初の10回と最後の10回の観測を印刷するには?
私は試しましたproc print data = ia.usage; where Obs < 10 & Obs > 80;run;
しかし、このコマンドでは90個の観測結果がすべて出力されています。どのようにこれを簡単に行う上の任意のアイデア?
ありがとうございました。
SASデータセットの最初の10回と最後の10回の観測結果だけを印刷する方法を探しています。私はこれを行う方法がありますか?SASで最初の10回と最後の10回の観測を印刷するには?
私は試しましたproc print data = ia.usage; where Obs < 10 & Obs > 80;run;
しかし、このコマンドでは90個の観測結果がすべて出力されています。どのようにこれを簡単に行う上の任意のアイデア?
ありがとうございました。
最初の10を取得することは簡単です:最後の10を取得
/*First 10 obs*/
proc print data = ia.usage(obs = 10); run;
は少し難しいですが、これはビューを使用して行うことができます。
/*Last 10 obs*/
data last10 /view = last10;
startobs = nobs - 9;
set ia.usage nobs = nobs firstobs = startobs;
drop startobs;
run;
proc print data = last10; run;
あなたは同じで、両方の場合proc printを使用すると、2つのビューを作成して別のビューに結合して印刷することができます。
data first10 /view = first10;
set ia.usage(obs = 10);
run;
data first10_last10 /view = first10_last10;
set first10 last10;
run;
proc print data = first10_last10; run;
上記の方法を実行する必要があります大規模なデータセットであっても高速ですが、データセット内の行数(nob)を知ることに依存するため、インラインデータセットはビューではないとみなします。ビューがある場合は、データセット全体を読み取って行数を調べ、最初と最後の10行を除くすべてを破棄して再度読み取る必要があります。これははるかに遅くなります。例えば。
data first10_last10 /view = first10_last10;
do nobs = 1 by 1 until(eof);
set ia.usage(drop = _all_) end = eof; /*We only want the row count, so drop all vars on this pass to save a bit of time*/
end;
do _n_ = 1 to nobs;
set ia.usage;
if _n_ <= 10 or _n_ >= nobs - 9 then output;
end;
run;
proc print data = first10_last10;
これは、単一のビューを使用して達成することができる。
data want/view=want;
set ia.usage nobs=__nobs;
if _n_ le 10 or _n_ gt __nobs-10;
run;
proc print data=want;
run;
それがデータセット全体ではなく、単に最初/最後の10行を読み取ることを含む、これは大規模なデータセットのために低速であってもよいです。 – user667489
はい、あなたが提出したアプローチがより効率的です –