5

var_1非常に大きなデータセット (ほぼ 1 テラバイト) で1 つの変数 ( と呼びます) を合計しようとしているとします。データセットは長くて広いです。私のコードは次のようになります。

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 に関しては、何があっても各レコードを完全に読み取る必要があると思います。ただし、レコードを読み取るために割り当てる必要があるメモリはおそらく少なくなります。アドバイスをいただければ幸いです。

4

4 に答える 4

5

はい、違いはあります。ほとんどの場合、大きな違いはありませんが、非常に広いデータセットまたは非常に長いデータセットを使用し始めると、何らかの利点が見られるようになります。

keep=以下のリンクで検索してください...

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

パフォーマンスの問題が発生している場合、これにより実行中の作業が数秒または数秒短縮される可能性がありますが、処理時間が半分になるわけではありません。必要に応じて、他の最適化手法を探してください。

于 2012-05-03T19:44:40.780 に答える
3

KEEPステートメントがPROCMEANSにとってより効率的(または必要)であることを示すものは何も見つかりません。

ただし、 WHEREステートメントを使用するだけでなく、MEANSコード内の他のOPTIONSを使用することで、効率を上げることができます。

于 2012-05-03T14:27:05.930 に答える
3

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

プロシージャーについては、SASはプロシージャー内で使用される変数のみを読み取るほど賢いと思います。多分誰かがこれを確認できますか?

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

于 2012-05-03T12:53:30.663 に答える
1

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

ただし、ログで処理時間をテストおよび確認できます。我々に教えてください!

編集:

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

したがって、SAS はすでにこのケースに最適化されていると思います。

于 2012-05-04T08:16:16.227 に答える