2

私はSASを学んでいて、2つの興味深い手順を見ています。

  proc Delete data = table;  run;

  proc datasets lib=Libr nolist;
        modify table;
           rename __first = second;
  quit;
  run;

そしてそれらについてのいくつかの質問:

  1. なぜいくつかの手順がそうでquitはないように終わったのrunですか?

  2. なぜ一緒にdatasets使うquitのですか?run(これはテーブルを終了するためのステートメントですか?)

  3. datasets-procedure小さなタスクに使用するのが最善の推奨事項ですか?(もちろんではありませんが、何のために?またはそれを使用しませんか?)

  4. また、どちらの方法が速いですか:proc deleteまたはsql-drop?(速度が速く、必要なデータ量が多い)

4

5 に答える 5

7
  1. 一部のSASプロシージャは、で実行されているためQUIT、ではなくで終了します。たとえば、では、ウィンドウの上部に実行中であることが示されている限り、追加のモデルステートメントを指定できます(バージョンを使用している場合)。RUNInteractive ModePROC GLMSASPROC GLMWindows

  2. 一部のプログラマーは、タイピングQUITRUN一緒に行う習慣を身につけています。QUITステートメントを使用するプロシージャは、入力するとすぐに実行を開始するため、実際には重要ではないと思います。私はどちらか一方だけを使用します。

  3. PROC DELETEサポートされていないレガシー機能です。PROC DATASETSこれは、SASでデータセットを処理するための指定されたツールであるによって正式に置き換えられました。メーリングリストの投稿

私は通常、にいる間にデータセットを削除する必要性があまりないことに気づきSASます。メモリ使用量を効果的に管理し、RAMが非常に豊富になっているためSAS、通常、セッションの開始時にオンデマンドで作成する一時データセットから作業の90%を実行します。

  1. 以前と同様に、PROC DELETEは廃止され、。が優先されPROC DATASETSます。非常に大きなデータを除いて、どちらが速いかという点では、それらの間にほとんど違いはないのではないかと思います。ただし、永続的なSASデータセットを処理するときは、実装(100%ではない)ではなく、SASで設計された方法を使用して永続的なデータセットを操作する方が良いと感じるため、PROC DATASETSではなく使用するのが好きです。PROC SQLSQL
于 2012-04-17T15:37:13.483 に答える
3

WRTの「実行」と「終了」:

一部のSASプロシージャは、「グループ実行処理」と呼ばれるものをサポートしています。これは、プロシージャが「実行」を確認したときに、要求されたすべての作業を実行することを意味します。声明。プロシージャは、「quit:」statemnetが表示されるまで実行を続けます。実際、「やめる」。ステートメントは自動的に「実行」を挿入します。まだやるべきことがある場合は声明。

PROCDATASETSはそれらの手順の1つです。「やめる」声明は、手順が行うためのこれ以上の作業はないと述べています。この些細な例を考えてみましょう。

proc datasets;
   change a=new_a;
run;
   delete new_a;
run;
quit;

最初のステートメント(変更)は、既存のデータセット「a」の名前を「new_a」に変更します。2番目のステートメントは、そのデータセットを削除します。「実行」を含めなかった場合。この例のステートメント(「change」の後)では、「new_a」データセットが存在しないことに気づき、どちらのステートメントも実行しないため、プロシージャは失敗します。

そうは言っても、私がPROCDATASETSを自分で使用することはめったにありません。私はPROCSQLを使用することを好みます。

WRT:PROCSQLを使用したPROCDELETEとDROPTABLEの比較:

PROC DELETEは正式に「非推奨」になっていますが、それはつまり、PROCDELETEが変更されなくなることを意味します。SASライブラリからデータオブジェクトを削除するのは簡単な手順です。いつも使っています。PROCSQLと比較して1つの特別な利点があります。PROC DELETEを使用して存在しないデータセットを削除しようとすると、ログに警告メッセージが表示されます。ただし、SQLからDROP TABLEステートメントを試行すると、エラーが発生し、SQLステップが停止します。TeradataやOracleなどの外部データベースにロードするETLスクリプトで新しいテーブルを作成するときは、常にPROCDELETEを使用します。

長い間、私は知っていますが、これが役立つことを願っています。

ボブ

于 2012-04-18T19:28:36.113 に答える
2

データセットとSQLのどちらがテーブルの削除に速いかについては、ここで少し調査しました。 Proc SQL一般的に速く、それは私にとって驚きでした。

于 2012-04-18T00:33:06.260 に答える
0

次のコードは、作業ライブラリ内のSASデータセットを削除できると思います。

procデータセットlib=work memtype = data kill; 走る;

終了する;

于 2012-07-12T07:02:59.667 に答える
0

PROC DELETE私はあなたがそれが消えていないこと、そしていつでもすぐにはなくなることをあなたが見つけると信じています。さらに、PROC DATASETS ... DELETE一部のタイプのライブラリでは、削除の形式よりも高速であることがよくあります。私の経験では、多くのデータセットを持つSPDSによって管理されるデータライブラリはPROC DATASETS、あらゆる種類のパフォーマンスを非常に低下させる可能性があるため、常にを使用しますPROC DELETE

于 2017-01-09T19:35:18.847 に答える