SQL プロシジャ

PROC SQL ステートメント

PROC SQLステートメント

制限事項:このプロシジャは、CASサーバーではサポートされません。

構文

PROC SQL <options>;

オプション引数

_METHOD

PROC SQLがSQLクエリで使用した実行メソッドの階層を表示します。各ステップはコードで識別され、SASログに表示されます。

操作_METHODオプションを使用する場合は、MSGLEVEL=Iシステムオプションを指定します。
例
options msglevel=I;
proc sql _method;
   title 'Population of Large Countries Grouped by Continent';
   select Continent, sum(Population) as TotPop format=comma15.
      from countries
      where Population gt 1000000
      group by Continent
      order by TotPop;
quit;
NOTE: SQL execution methods chosen are:

      sqxslct
          sqxsort
              sqxsumg
                  sqxsort
                      sqxsrc( COUNTRIES )
 

_TREE

SQLクエリがどのように実行されたかを階層的に表示します。

例
proc sql _tree;
   title 'Population of Large Countries Grouped by Continent';
   select Continent, sum(Population) as TotPop format=comma15.
      from countries
      where Population gt 1000000
      ;
quit;
Tree as planned.
                               /-SYM-V-(countries.Continent:5 flag=00000001)
                     /-OBJ----|
                    |          \-SYM-A-(TotPop:1 flag=00000039)
           /-AGGR---|
          |         |                    /-SYM-V-(countries.Population:3 flag=
00000001)
          |         |          /-OBJ----|
          |         |         |          \-SYM-V-(countries.Continent:5 flag=
00040001)
          |         |--SRC----|
          |         |         |--TABL[SQL].countries opt=''
          |         |         |          /-NAME--(Population:3)
          |         |          \-CGT----|
          |         |                    \-LITN(1000000)
          |         |--empty-
          |         |--empty-
          |         |--empty-
          |         |--empty-
          |         |                    /-SYM-A-(TotPop:1 flag=00000039)
          |         |          /-ASGN---|
          |         |         |          \-SYM-G-(#TEMG001:1 stat=8,0 from
Population(0,0))
          |         |--OBJE---|
          |         |--empty-
          |         |          /-SYM-G-(#TEMG001:1 stat=8,0 from Population(0,0))
          |         |--TLST---|
          |         |          /-SYM-S-(Population:2 ss=0220x)
          |          \-SLST---|
 --SSEL---|

CONSTDATETIME | NOCONSTDATETIME

SQLプロシジャがクエリを実行する前に、クエリ内のDATE関数、TIME関数、DATETIME関数、TODAY関数への参照を等価の定数値で置き換えるかどうかを指定します。これらの値を一度計算すると、クエリで関数を複数回使用した場合、またはクエリが日付や時刻の境界近くで関数を実行した場合に結果の一貫性が保たれます。

NOCONSTDATETIMEオプションを設定すると、PROC SQLは、オブザベーションを処理するたびにクエリ内のこれらの関数を評価します。

デフォルトCONSTDATETIME
操作CONSTDATETIMEオプションとREDUCEPUT=オプションの両方が指定された場合、PROC SQLは、PUT関数値を決定するために、クエリを実行する前にDATE関数、TIME関数、DATETIME関数、TODAY関数を、それぞれの値で置き換えます。
ヒントあるいは、SQLCONSTDATETIMEシステムオプションを設定することもできます。SQLCONSTDATETIMEシステムオプションで指定した値は、PROC SQL CONSTDATETIMEオプションが設定されない限り、すべてのSQLプロシジャステートメントに対して有効です。CONSTDATETIMEオプションの値は、SQLCONSTDATETIMEシステムオプションよりも優先されます。RESETステートメントを使用して、CONSTDATETIMEオプションを設定またはリセットすることもできます。ただし、CONSTDATETIMEオプションの値を変更しても、SQLCONSTDATETIMEシステムオプションの値は変更されません。詳細については、SQLCONSTDATETIME システムオプションを参照してください。

DICTDIAG | NODICTDIAG

レポートに診断列を作成するかどうかを指定します。レポートの診断列には、開くことができなかった各DICTIONARYテーブルのメッセージが含まれています。

デフォルトNODICTDIAG

DOUBLE | NODOUBLE

レポートの行間を2行に設定するかどうかを指定します。

デフォルトNODOUBLE
2つのテーブルを組み合わせる

DQUOTE=ANSI | SAS

PROC SQLが二重引用符(" ")で囲まれた値を変数として扱うか文字列として扱うかを指定します。DQUOTE=ANSIを指定すると、PROC SQLは、二重引用符で囲まれた値を変数として扱います。この機能によって、次の値をテーブル名、列名または別名として使用できるようになります。

  • AS、JOIN、GROUPなどの予約語。
  • 通常はSASで許可されない、DBMS名などの名前。

二重引用符で囲まれた値には、任意の文字を含めることができます。

DQUOTE=SASを指定すると、二重引用符で囲まれた値は文字列として扱われます。

デフォルトSAS

ERRORSTOP | NOERRORSTOP

PROC SQLでエラーが発生した場合に、PROC SQLが実行を停止するかどうかを指定します。バッチまたは非対話型セッションにおいてERRORSTOPを指定すると、PROC SQLは、エラーが発生するとステートメントの実行を停止しますが、構文のチェックは続行します。

NOERRORSTOPを指定すると、PROC SQLは、エラーが発生した後もステートメントを実行し、構文のチェックを続行します。

デフォルト対話型SASセッションでのNOERRORSTOP、バッチまたは非対話型セッションでのERRORSTOP
操作このオプションは、EXECオプションが有効な場合にのみ有効です。
ヒントERRORSTOPは、SASがバッチまたは非対話型実行モードで実行している場合にのみ有効です。
NOERRORSTOPは、エラー発生後もバッチジョブにSQLプロシジャステートメントの実行を継続させる場合に役立ちます。

EXEC | NOEXEC

構文が正確かを確認した後、ステートメントを実行するかどうかを指定します。

デフォルトEXEC
ヒントNOEXECは、ステートメントを実行しないでSQLステートメントの構文を確認する場合に役立ちます。
参照項目:エラーストップ

EXITCODE

PROC SQLがすべてのSQLステートメントのエラーコードをクリアすることを指定します。エラーコードはSQLEXITCODEマクロ変数に割り当てられています。

デフォルト0 (エラーコードはクリアされません。)
ヒント終了コードは、PROC SQLステートメントの間で、RESET ステートメントを使用して、デフォルト値にリセットできます。
参照項目:PROC SQL自動マクロ変数の使用

FEEDBACK | NOFEEDBACK

ビューの参照が展開された後、または特定の他のステートメント変換が実行された後に、PROC SQLがSASログにPROC SQLステートメントを表示するかどうかを指定します。

このオプションには次の効果があります。

  • 任意のアスタリスク(たとえば、SELECT *) が、それが表す修飾された列のリストに展開されます。
  • PROC SQLビューが、その元になるクエリに展開されます。
  • マクロ変数が解決されます。
  • すべての式の前後にかっこが表示され、それらの式の評価順序が詳細に示されます。
  • コメントが削除されます。
デフォルトNOFEEDBACK

FLOW<=n <m>> | NOFLOW

n個よりも長い文字の列が複数行に改行されることを指定します。PROC SQLは、列の幅をnに設定し、n個よりも長い文字の列を複数行に改行することを指定します。FLOW=n mを指定した場合、PROC SQLは、適切なレイアウトを得るために、これらの値の範囲内で列の幅を調整します。引数なしでFLOWを指定した場合は、FLOW=12 200を指定した場合と同じになります。

デフォルトNOFLOW

INOBS=n

PROC SQLが1つのソースから検索する行(オブザベーション)の数を制限します。

ヒントINOBS=は、大きなテーブルに関するクエリのデバッグを行う場合に役立ちます。

IPASSTHRU | NOIPASSTHRU

暗黙のパススルーを有効にするか無効にするかを指定します。

PROC SQLを呼び出すときに、暗黙のパススルーが有効になります。1つのクエリまたは一連のクエリに対して、これを無効にできます。暗黙のパススルーを無効にしたほうがよい場合の主な理由は次のとおりです。

  • DBMSはSQL2のNULL値の意味を使用し、その動作はSASの欠損値とはやや異なります。
  • PROC SQLのクエリ最適化処理が改善する場合があります。
デフォルトIPASSTHRU
参照項目:DBMSのパススルー機能に関するドキュメントについては、SAS/ACCESS for Relational Databases: リファレンスを参照してください。

LOOPS=n

PROC SQLでの内部ループの反復回数をnに制限します。ループ回数を知るには、それぞれのSQLステートメントの実行後にSQLOOPSマクロ変数でレポートされる反復回数を使用します。制限を設定することによって、クエリがコンピューターリソースを過剰に使用しないようにします。たとえば、結合の一致条件を満たさない3つの大きなテーブルを結合しようとすると、巨大な内部テーブルが作成されて、実行の効率が悪くなる場合があります。

参照項目:PROC SQL自動マクロ変数の使用

NUMBER | NONUMBER

SELECTステートメントがROWと呼ばれる列を含むかどうかを指定します。ROWは、行を検索するときのデータの行(またはオブザベーション)番号です。

デフォルトNONUMBER
2つのテーブルを結合する

OUTOBS=n

出力の行(オブザベーション)の数を制限します。たとえば、OUTOBS=10を指定し、クエリ式を使用して値をテーブルに挿入した場合、SQLプロシジャは最大で10行を挿入します。同様に、OUTOBS=10によって出力は10行に制限されます。

PRINT | NOPRINT

SELECTステートメントの結果を出力するかどうかを指定します。

デフォルトPRINT
操作NOPRINTは、SQLOBS自動マクロ変数の値に影響を与えます。詳細については、PROC SQL自動マクロ変数の使用を参照してください。
ヒントNOPRINTは、テーブルから値を選択してそれをマクロ変数に入力し、何も表示しないようにする場合に役立ちます。

PROMPT | NOPROMPT

INOBS=オプション、OUTOBS=オプションおよびLOOPS=オプションの影響を変更します。PROMPTオプションを指定した場合、INOBS=、OUTOBS=またはLOOPS=で指定した制限に達すると、PROC SQLは、停止または続行を選択するためのプロンプトを表示します。プロンプトは、同じ上限に達するたびに繰り返し表示されます。

デフォルトNOPROMPT

REDUCEPUT=ALL | NONE | DBMS | BASE

クエリでのPUT関数の最適化に使用されるエンジンタイプを指定します。PUT関数は、論理的に等価な式で置き換えられます。エンジンタイプには、次のいずれかの値を指定できます。

ALL

すべてのPUT関数の最適化を考慮することを指定します。これは、クエリがデータのアクセスにどのエンジンを使用するかにかかわりません。

NONE

どのPUT関数も最適化しないことを指定します。

DBMS

SAS/ACCESSエンジンが実行するクエリ内のすべてのPUT関数について最適化を考慮することを指定します。

要件PUT関数に渡す最初の引数は、テーブルから取得される変数である必要があります。テーブルには、SAS/ACCESSエンジンを使用してアクセスする必要があります。

BASE

SAS/ACCESSエンジンまたはBase SASエンジンが実行するクエリ内のすべてのPUT関数について最適化を考慮することを指定します。

デフォルトDBMS
操作REDUCEPUT=オプションとCONSTDATETIMEオプションの両方が指定された場合、PROC SQLは、PUT関数値を決定するために、クエリを実行する前にDATE関数、TIME関数、DATETIME関数、TODAY関数をそれぞれの値で置き換えます。
クエリにWHERE句またはHAVING句も含まれる場合、WHERE句またはHAVING句の評価が簡略化されます。
ヒントあるいは、SQLREDUCEPUT=システムオプションを設定することもできます。SQLREDUCEPUT=システムオプションで指定した値は、REDUCEPUT=オプションが設定されない限り、すべてのSQLプロシジャステートメントに対して有効です。REDUCEPUT=オプションの値は、SQLREDUCEPUT=システムオプションよりも優先されます。RESETステートメントを使用して、REDUCEPUT=オプションを設定またはリセットすることもできます。ただし、REDUCEPUT=オプションの値を変更しても、SQLREDUCEPUT=システムオプションの値は変更されません。詳細については、SQLREDUCEPUT= システムオプションを参照してください。

REDUCEPUTOBS=n

REDUCEPUT=オプションをDBMS、BASEまたはALLに設定した場合、PROC SQLがクエリ内のPUT関数の最適化を考慮するためにテーブルに存在する必要のあるオブザベーションの最小数を指定します。

デフォルト0。これは、PROC SQLがPUT関数を最適化するために使用するテーブル内のオブザベーションの最小数がないことを示します。
範囲0-263–1、または約920京
要件nは、整数でなければなりません
操作REDUCEPUTOBS=オプションは、テーブル内のオブザベーションの数を記録するDBMSに対してのみ動作します。使用しているDBMSがオブザベーションの数を記録しなくても、テーブルの行カウントを作成すれば、REDUCEPUTOBS=オプションは動作します。
ヒントあるいは、SQLREDUCEPUTOBS=システムオプションを設定することもできます。SQLREDUCEPUTOBS=システムオプションで指定した値は、REDUCEPUTOBS=オプションが設定されない限り、すべてのSQLプロシジャステートメントに対して有効です。REDUCEPUTOBS=オプションの値は、SQLREDUCEPUTOBS=システムオプションよりも優先されます。RESETステートメントを使用して、REDUCEPUTOBS=オプションを設定またはリセットすることもできます。ただし、REDUCEPUTOBS=オプションの値を変更しても、SQLREDUCEPUTOBS=システムオプションの値は変更されません。詳細については、SQLREDUCEPUTOBS= システムオプションを参照してください。

REDUCEPUTVALUES=n

REDUCEPUT=オプションをDBMS、BASEまたはALLに設定した場合、PROC SQLがクエリ内のPUT関数の最適化を考慮するためにPUT関数式に存在できるSAS出力形式値の最大数を指定します。

デフォルト100
範囲100–3,000
要件nは、整数でなければなりません
操作PUT関数式内のSAS出力形式値の数がこの値を超えた場合、PROC SQLはPUT関数を最適化しません。
ヒントあるいは、SQLREDUCEPUTVALUES=システムオプションを設定することもできます。SQLREDUCEPUTVALUES=システムオプションで指定した値は、REDUCEPUTVALUES=オプションが設定されない限り、すべてのSQLプロシジャステートメントに対して有効です。REDUCEPUTVALUES=オプションの値は、SQLREDUCEPUTVALUES=システムオプションよりも優先されます。RESETステートメントを使用して、REDUCEPUTVALUES=オプションを設定またはリセットすることもできます。ただし、REDUCEPUTVALUES=オプションの値を変更しても、SQLREDUCEPUTVALUES=システムオプションの値は変更されません。詳細については、SQLREDUCEPUTVALUES= システムオプションを参照してください。
REDUCEPUTVALUES=の値は、個別の最適化で使用されます。たとえば、WHERE句にPUT関数が存在し、SELECTステートメントには別のPUT関数が存在し、値を含む両方の関数にユーザー定義の出力形式が設定されている場合、REDUCEPUTVALUES=の値が句とステートメントで別々に適用されます。

REMERGE | NOREMERGE

データの再マージを使用するクエリをPROC SQLが処理できるかどうかを指定します。PROC SQLの再マージ機能は、クエリを完了するために、テーブルのパススルーを2回実行します。つまり、最初のパススルーで作成されたデータを、2番目のパススルーで使用します。NOREMERGEシステムオプションが設定されると、PROC SQLはデータの再マージを処理できません。NOREMERGオプションを設定して再マージを実行しようとすると、エラーがSASログに書き込まれます。

デフォルトREMERGE
ヒントあるいは、SQLREMERGEシステムオプションを設定することもできます。SQLREMERGEシステムオプションで指定した値は、PROC SQL REMERGEオプションが設定されない限り、すべてのSQLプロシジャステートメントに対して有効です。REMERGEオプションの値は、SQLREMERGEシステムオプションよりも優先されます。RESETステートメントを使用して、REMERGEオプションを設定またはリセットすることもできます。ただし、REMERGEオプションの値を変更しても、SQLREMERGEシステムオプションの値は変更されません。詳細については、SQLREMERGE システムオプションを参照してください。
参照項目:データの再マージ

SORTMSG | NOSORTMSG

PROC SORTを使用してテーブルを内部的に並べ替えることができるORDER BYのような特定の操作の場合、並べ替えに関する情報がPROC SORTから要求されるかどうか、およびその情報がログに表示されるかどうかを指定します。

デフォルトNOSORTMSG

SORTSEQ=sort-table | LINGUISTIC

クエリにORDER BY句が含まれる場合に使用される照合順序を指定します。このオプションは、システムまたはインストールの、デフォルトの照合順序以外の照合順序が必要な場合にのみ使用します。

sort-tablePROC TRANTABで作成した変換テーブルを指定します。
LINGUISTIC照合順序がセッションロケールから決定され、デフォルトの照合オプションが使用されることを指定します。SORTSEQシステムオプションに対してLINGUISTICが指定された場合、PROC SQはその設定に従います。PROC SQL SORTSEQオプションの設定は、SORTSEQシステムオプションの設定よりも優先されます。

注意

ORDER BY句でSORTKEY関数を使用する場合は、PROC SQLのSORTSEQ=LINGUISTICオプション、またはSORTSEQ=LINGUISTICシステムオプションを使用しないでください。意図しない順序が生成されます。

参照項目:SORTSEQ= システムオプション (SAS各国語サポート(NLS): リファレンスガイド)
言語照合の指定 (SAS各国語サポート(NLS): リファレンスガイド)

STIMER | NOSTIMER

PROC SQLが、タイミング情報を、プロシジャ全体の累積値ではなくステートメントごとにSASログに書き込むかどうかを指定します。このオプションが動作するには、SASシステムオプションのSTIMERも指定する必要があります。オペレーティングシステムによっては、SASを呼出すときにこのシステムオプションを指定する必要があります。このシステムオプションを単独で使用すると、ステートメントごとのタイミング情報ではなく、SQLプロシジャ全体のタイミング情報が表示されます。

デフォルトNOSTIMER

STOPONTRUNC

切り捨てエラーが発生した場合に、列のサイズよりも大きいデータを含む行を挿入または更新しないことを指定します。これは、INSERTステートメントまたはUPDATEステートメントでSET句を使用した場合にのみ適用されます。

THREADS | NOTHREADS

システムオプションが制限されていない限り、特定のPROC SQLの呼び出しに対して、SASシステムオプションのTHREADS|NOTHREADSをオーバーライドします。(制限事項を参照。)特定のクエリで使用するために、THREADS|NOTHREADSをRESETステートメントで指定することもできます。THREADSを指定すると、PROC SQLは、大量のデータを伴う並べ替え動作のパフォーマンス向上を目的として、並列処理を使用します。並列処理の詳細については、SAS言語リファレンス: 解説編を参照してください。

デフォルトSASシステムオプションのTHREADS | NOTHREADSの値。
制限事項サイト管理者は、制限対象オプションテーブルを作成できます。制限対象オプションテーブルは、起動時に構築されるSASシステムオプション値を指定します。この値は、オーバーライドできません。THREADS | NOTHREADSシステムオプションを制限対象オプションテーブルに記述すると、このオプションを設定するどのような試みも無視され、警告メッセージがSASログに書き込まれます。
操作PROC SQLステートメントまたはRESETステートメントでTHREADS|NOTHREADSが指定された場合、このPROC SQLの呼び出しでは、このオプションをデフォルト(つまり、SASシステムオプションのTHREADS|NOTHREADSの値)にリセットする方法はありません。
参照項目:THREADS システムオプション (SASシステムオプション: リファレンス)

UNDO_POLICY=NONE | OPTIONAL | REQUIRED

データの更新中にエラーが発生した場合にPROC SQLが更新済みデータをどう処理するかを指定します。UNDO_POLICY=を使用して、変更を永続化するかどうかを制御できます。

NONE

すべての更新または挿入を維持します。

OPTIONAL

確実に破棄できるすべての更新または挿入を破棄します。

REQUIRED

エラー発生時点までに実行されたすべての挿入または更新を破棄します。場合によっては、確実にUNDO操作を実行できるとは限りません。たとえば、プログラムがSAS/ACCESSビューを使用する場合、同時に行われた他の変更による影響を破棄しなければ、INSERTステートメントおよびUPDATEステートメントによる影響を破棄できないことがあります。その場合、PROC SQLはエラーメッセージを発行し、ステートメントを実行しません。

このオプションは、他のユーザーが新しく挿入された行を更新することを許可します。挿入中にエラーが発生した場合、PROC SQLは、別のユーザーが更新したレコードを削除できます。その場合、ステートメントは実行されず、エラーメッセージが発行されます。

デフォルトREQUIRED
ヒントSPDエンジンを使用してデータセットを更新している場合、UNDO_POLICY=NONEに設定することによって処理のパフォーマンスを大幅に向上できます。ただし、NONEがアプリケーションに適した設定であることを確認してください。
あるいは、SQLUNDOPOLICYシステムオプションを設定することもできます。SQLUNDOPOLICY=システムオプションで指定した値は、PROC SQLのUNDO_POLICY=オプションが設定されない限り、すべてのSQLプロシジャステートメントに対して有効です。UNDO_POLICY=オプションの値は、SQLUNDOPOLICY=システムオプションよりも優先されます。RESETステートメントを使用して、UNDO_POLICY=オプションを設定またはリセットすることもできます。ただし、UNDO_POLICY=オプションの値を変更しても、SQLUNDOPOLICY=システムオプションの値は変更されません。プロシジャの完了後は、SQLUNDOPOLICY=システムオプションの値に戻ります。詳細については、SQLUNDOPOLICY= システムオプションを参照してください。

UBUFSIZE=n | nK | nM | nG

PROC SQLのページ化されたメモリサブシステムにおける内部的な一時バッファーのページサイズを指定します。PROC SQLは、このサブシステムを使用して、結合、集計、交差などの操作を実装します。出力は、1(バイト)、1024(キロバイト)、1,048,576(メガバイト),、1,073,741,824(ギガバイト)のうちのいずれかの倍数で表されます。たとえば、値65536では65536バイトのページサイズ、値64kでは65536バイトのページサイズが指定されます。

UBUFSIZEを、特定のクエリで使用するためにRESETステートメントで指定することもできます。

注: SAS 9.4より前のバージョンで使用されていたBUFFERSIZEオプションは、UBUFSIZEオプションと同じ機能を持つオプションであり、引き続きサポートされます。SAS 9.4では、UBUFSIZEオプションの方が優先されます。
デフォルト0。これを指定すると、SASはオペレーティングシステムの最小最適ページサイズを使用します。

WARNRECURS | NOWARNRECURS

再帰的参照に対する警告をSASログに表示するかどうかを指定します。

NOWARNRECURSは、再帰的参照を、警告のかわりに注としてSASログに表示することを指定します。

デフォルトWARNRECURS

詳細

注: PROC SQLステートメントの間でRESET ステートメントを使用して、オプションを追加、削除、または変更できます。
最終更新: 2026年4月14日