2012-05-03 10 views
5

非常に大きなデータセット(ほぼ1テラバイト)内で1つの変数(var_1と呼ぶ)を合計しようとしているとします。データセットは長くて広いです。私のコードは次のようになります。SASデータセットのKEEPオプションを使用すると、読み取りパフォーマンスが向上しますか?

PROC MEANS DATA=my_big_dataset SUM; 
    VAR var_1; 
RUN; 

は私が読まれたデータセットにKEEPオプションを使用して、まったくのパフォーマンスゲインを得るだろうか?それは次のとおりです。ディスクの面では

PROC MEANS DATA=my_big_dataset (KEEP=var_1) SUM; 
    VAR var_1; 
RUN; 

I/O、Iは、各レコードはどんな全体を読まれてはならないことを想像してみてください。しかし、レコードを読むために割り当てられるメモリが少なくて済むかもしれません。アドバイスをいただければ幸いです。

答えて

5

はい、違いがあります。ほとんどの場合、それほど大きな違いはありませんが、非常に幅の広いデータセットまたは非常に長いデータセットを作成し始めると、いくつかの利点が見え始めます。下のリンクをkeep=ため

検索...

http://support.sas.com/techsup/technote/ts298.html

あなたは、これはあなたが何をしているかオフ秒または秒の端数を剃ることがありますが、カットするつもりはないパフォーマンスの問題を抱えている場合あなたの処理時間は半分になります。必要な場合は、他の最適化手法を探してください。

3

データストアに関しては、DROPまたはKEEPステートメントを指定しないかぎり、すべての変数がPDVに読み込まれます。

手順については、が必要です。 SASは、プロシージャ内で使用されている変数のみを読み取るのに十分なほど巧妙です。多分誰かがこれを確認できますか?

これを判断するためのテストを簡単に作成できます。

+0

良い提案 - 私はこのセットからの次のいくつかの大きな読書の過程でいくつかのベンチマークを試みようとします。 –

3

KEEPステートメントがPROC MEANSの方が効率的(または必要)であることを示すものが見つかりません。

ただし、WHEREステートメントを使用すると、MEANSコード内に他のを使用すると、効率が向上します。

1

whereステートメントは、一般にkeepオプションよりも効率的だと思います。 ただし、の場合は、どこが役に立たず、proc呼び出しのkeepオプションを追加すると何かが変更されるのではないかと思います。

しかし、ログで処理時間をテストして確認することができます。 お知らせください!

編集:

私は私が持っている最大のデータセットのいずれかでテストしていました。 保留オプションを使用した場合:0.03処理時間 保留オプションなし0.01処理時間

この場合、SASはすでに最適化されていると思います。

関連する問題