2017-09-17 13 views
1

SASデータセットの最初の10回と最後の10回の観測結果だけを印刷する方法を探しています。私はこれを行う方法がありますか?SASで最初の10回と最後の10回の観測を印刷するには?

私は試しましたproc print data = ia.usage; where Obs < 10 & Obs > 80;run; しかし、このコマンドでは90個の観測結果がすべて出力されています。どのようにこれを簡単に行う上の任意のアイデア?

ありがとうございました。

答えて

4

最初の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; 
0

これは、単一のビューを使用して達成することができる。

data want/view=want; 
    set ia.usage nobs=__nobs; 
    if _n_ le 10 or _n_ gt __nobs-10; 
run; 

proc print data=want; 
run; 
+0

それがデータセット全体ではなく、単に最初/最後の10行を読み取ることを含む、これは大規模なデータセットのために低速であってもよいです。 – user667489

+0

はい、あなたが提出したアプローチがより効率的です –

関連する問題