1

これら 3 つのコード サンプル間で、SAS エンジンに実行を求めている内容の違いは何ですか?

サンプルA

PROC SQL; CREATE TABLE foo AS 
SELECT
    aaa
FROM
   table1
;

CREATE TABLE bar AS 
SELECT
    aaa
FROM
   foo
;

サンプル B

PROC SQL; CREATE TABLE foo AS 
SELECT
    aaa
FROM
   table1
;

PROC SQL; CREATE TABLE bar AS                        /* Difference is here */
SELECT
    aaa
FROM
   foo
;

サンプル C

PROC SQL; CREATE TABLE foo AS 
SELECT
    aaa
FROM
   table1
;

QUIT;                                                /* Difference is here */

PROC SQL; CREATE TABLE bar AS 
SELECT
    aaa
FROM
   foo
; 
4

2 に答える 2

2

Proc SQLは、セミコロン ( ;) で終わる各セクションをステートメントとして扱い、提出するまでこれを続けますquit ;。最後にステートメントがないことを除けばquit、最初のブロックと 3 番目のブロックは問題ありません。2 番目のブロックには無関係なProc SQL, があり、これは SQL 送信を停止して開始するだけであり、あまり適切なコードではありません。最初のブロックと 3 番目のブロックはプログラミングに適しています。最初proc sqlは失敗しますが、2 番目は引き続き実行されます。

于 2014-09-11T08:30:25.590 に答える
1

a で終わるPROCステートメントは、そのQUIT中から複数の「コマンド」を実行できます。SQL でデータ探索を行っているとします。PROC SQLステートメントを入力し、SQL コマンドを 1 つずつ送信して実行することができますPROC SQL。毎回 を発行する必要はありません。完了したら、最終的に発行しQUITます。

これは、GUI で作業する人よりも、コマンド ライン インターフェイスから SAS で作業する人向けに設計されています。

別の例は、PROC DATASETSステートメントです。

SAS は、ステートメントの終わりを自動的に認識し、別の PROC の開始など、他の特定のステートメント境界に遭遇した場合にorコードをPROC SQL自動的にサブミットします。ただし、コードの可読性が向上するため、適切なorステートメントでステートメントを常に明示的に終了することをお勧めします。QUIT;RUN;PROCRUN;QUIT;

個人的には、結果ウィンドウに出力を生成しないようPROC SQLに、noprint オプション ( ) を追加することを好みます。PROC SQL noprint;結果を確認したい場合は、エクスプローラーを使用してテーブルを表示します。エクスプローラーの方がタスクに適していることがわかり、結果ウィンドウがきれいに保たれます。PROC SQLまた、ステートメントを個別に実行してパフォーマンスを確認できるように、ステートメントを 1 つしか発行しないようにしています。

于 2014-09-11T14:36:16.660 に答える