前のページ|次のページ

SETステートメント

1つ以上のSASデータセットからオブザベーションを読み込みます。

該当要素: DATAステップ
カテゴリ: ファイル操作
種類: 実行
注: SETステートメントを使用して読み込まれた変数はPDVで保持されます。詳細についてはXisError: No pubcode in link data found for lrconおよび RETAINステートメントを参照してください。
ヒント: SETステートメントを使用してデータを読み込む方法については、SASチュートリアルビデオSASデータセットの読み込み をご覧ください。

構文

引数なし

引数を指定しない場合、SETステートメントは最近作成されたデータセットからオブザベーションを読み込みます。

引数

SAS-data-set (s)

1レベル名、2レベル名、特殊SASデータセット名の1つを指定します。

ヒント データセットのリストを指定できます。 詳細については、SETステートメントでデータセットを使用するを参照してください。
データセット名を使用するかわりに、オペレーティングシステムでサポートされている構文を使用してファイルの物理パス名を指定することができます。物理パス名は一重引用符または二重引用符で囲む必要があります。
参照項目 SASデータセット名のレベルと各レベルの用途については、XisError: No pubcode in link data found for lrconを参照してください。
データセットリストを使用する

(data-set-options)

処理対象の変数またはオブザベーションをプログラムデータベクトルに読み込むときに実行するアクションを指定します。

ヒント データセットリストに適用するデータセットオプションは、データセットリストに存在するすべてのデータセットに適用されます。
参照項目 入力データセットに使用できるデータセットオプションの一覧については、XisError: No pubcode in link data found for ledsoptsrefを参照してください。

SETオプション

CUROBS=variable

データセットから読み込んだオブザベーション数を含む変数を作成および名前を付与

現在のオブザベーション番号を調べる

END=variable

作成する一時変数の名前を指定します。この変数の値には終端指示子が格納されます。この変数の値は0に初期化されますが、SETステートメントに指定されている最後のデータセットから最後のオブザベーションを読み込むときに1に設定されます。この変数は、新しいデータセットには追加されません。

制限事項 END=オプションはPOINT=オプションと併用できません。ランダムアクセスを使用する場合、END=に指定した変数の値は1に設定されません。
操作 BYステートメントを使用する場合、インタリーブされたデータセットから最後のオブザベーションをSETステートメントが読み込むときにEND=の値が1に設定されます。 詳細については、SETを使用したBYグループ処理を参照してください。
すべてのオブザベーション読み込み後にオブザベーションを書き込む

KEY=index</UNIQUE>

インデックス変数またはキーの値に基づいて、SASデータセット内のオブザベーションに非順次アクセスします。

範囲 読み込むデータセットの単一インデックス名または複合インデックス名を指定します。
制限事項 KEY=オプションはPOINT=オプションと併用できません。
ヒント SYSRC自動呼び出しマクロと_IORC_自動変数を組み合わせて使用すると、エラー処理に活用できる情報をこれまでよりも多く得ることができます。SETステートメントにKEY=オプションを使用すると、自動変数_IORC_が作成されます。この自動変数の値は、SASデータセットのオブザベーションに対して実行した、最新の入出力処理のステータスを示すリターンコードに設定されます。KEY=オプションの値が見つからない場合、_IORC_変数はSYSRC自動呼び出しマクロのニーモニック_DSENOMに対応する値を返します。また、自動変数_ERROR_の値を1に設定します。
SETステートメントをKEY=オプションと重複するインデックスで使用した場合、SETステートメントはキー値に一致する最初のオブザベーションから読み込み開始するようにした方が良い結果が得られます。KEYRESET=オプションを使って、読み込むデータセットのインデックスの先頭からKEY=オプションに指定された値の検索を開始するかどうかをコントロールします。
参照項目 詳細については、SASマクロ言語: リファレンスのSYSRC自動呼出しマクロの説明を参照してください。
KEYRESET=variable
UNIQUEオプション
テーブルルックアップの実行

マスタファイルに重複するオブザベーションが含まれる場合、テーブルルックアップを実行する

注意:
KEY=オプションを使用する場合、無限ループが発生する可能性があります。
プライマリデータセットを指定せずにKEY=オプションを使用する場合、DATAステップの処理を終了させるSTOPステートメント、または_IORC_自動変数とSYSRC自動呼び出しマクロを組み合わせて使用し、_IORC_変数の無効な値をチェックするプログラムロジックのどちらかまたは両方を使用する必要があります。

KEYRESET=variable

読み込むデータセットのインデックスの先頭からKEY=オプションに指定された値の検索を開始するかどうかをコントロールします。KEYRESET変数の値が1の場合、インデックスの一番上から検索します。KEYRESET変数の値が0の場合、インデックスの検索はリセットされないので、最後の検索のつづきから検索します。

操作 KEYRESET=オプションはUNIQUEオプションに似ていますが、KEYRESET=オプションではKEY=検索をインデックスの最初からにするかどうかを決められます。
参照項目 KEY=index</UNIQUE>
UNIQUE
KEYRESETオプションの使用

INDSNAME=variable

作成する変数の名前を指定します。この変数には、現在のオブザベーションの読み込み先となるSASデータセット名が格納されます。格納される名前はデータセット名または物理名になります。物理名には動作環境でファイルを判別できる名前を指定します。

ヒント データセット名の場合、変数の値にライブラリ名を追加した後(例:WORK.PRICE)、この2レベル名を大文字に変換します。
定義されていない場合、変数の長さは41バイトに設定されます。ファイル名が41バイトより長い場合、LENGTHステートメントを使用すると、物理ファイル名を格納できる長さにまで変数の長さを拡張できます。
この変数が特定の長さを指定した文字変数として定義されている場合、変数の長さは変更されません。INDSNAME変数の値が定義した長さを超えている場合、値は切り捨てられます。
この変数が数値変数として定義されている場合はエラーが発生します。
変数はDATAステップのどの位置にでも指定できますが、変数は出力には追加されません。
現在のオブザベーションを読み込むデータセットの名前を取得する

NOBS=variable

作成する一時変数の名前を指定します。この一時変数の値は、1つまたは複数の入力データセットの中のオブザベーションの合計数になります。SETステートメントに複数のデータセットを指定する場合、NOBS=オプションの変数の値は、指定した複数のデータセットに含まれるオブザベーションの合計数になります。オブザベーション数には、削除対象としてマークされていても、まだ削除されていないオブザベーションも含まれます。

制限事項 特定のSASビューとTAPEやXMLエンジンのような順次エンジンに対しては、SASがオブザベーション数を検知することができません。この場合、NOBS=オプションに指定した変数の値には、動作環境で使用できる最大の正の整数値が設定されます。
操作 NOBS=オプションとPOINT=オプションは互いに独立しています。
ヒント コンパイル時に、各データセットのディスクリプタ情報を読み込んでから、NOBS=オプションの変数の値を自動的に割り当てます。そのため、SETステートメントの実行前にもNOBS=オプションの変数を参照できます。この変数はDATAステップで使用できますが、出力データセットには追加されません。
最終オブザベーションに到達するまで関数を実行する

OPEN=(IMMEDIATE | DEFER)

処理の準備ができるまで、連結されたSASデータセットを開くことを保留できます。

IMMEDIATE

コンパイル中に、SETステートメントに指定されているすべてのデータセットを開きます。

制限事項 IMMEDIATEオプションを使用する場合、KEY=、POINT=、BYステートメントの処理を使用できますが、使用できるのはそのうち1つだけです。
ヒント 後から開いたデータセットの変数の種類が最初に開いたデータセットにある同じ名前の変数の種類と異なる場合(例:最初の変数の種類が文字で後の変数の種類が数値など)、DATAステップの処理は中止され、エラーメッセージが出力されます。

DEFER

コンパイル中に最初のデータセットを開きます。後続のデータセットは実行中に開きます。1つのDATAステップ内のすべてのオブザベーションの読み込みと処理が終了すると、そのオブザベーションを閉じてから、指定されている次のデータセットを開きます。

制限事項 DEFERオプションを指定する場合、KEY=ステートメントオプション、POINT=ステートメントオプション、BYステートメントは使用できません。この3つによって、データセットのオブザベーションをランダムに処理するかインタリーブするかを暗示的に指定します。ただし、すべてのデータセットが開いていない場合、この処理を実行できません。
要件 変数の処理にDROP=、KEEP=、RENAME=データセットオプションを使用できますが、各データセットで処理する変数は同一の変数でなければなりません。通常、後続のデータセットで定義された変数が最初のデータセットで定義された変数と異なる場合、警告メッセージが出力されますが、処理は中止せずに行われます。
  • 後から開いたデータセットの変数の種類が最初に開いたデータセットにある同じ名前の変数の種類と異なる場合(例:最初の変数の種類が文字で後の変数の種類が数値など)、DATAステップの処理は中止され、エラーメッセージが出力されます。
  • 後から開いたデータセットの変数がSETステートメントで最初に開いたデータセットには定義されていないが、DATAステッププログラムにあらかじめ定義されている場合、DATAステップの処理は中止され、エラーメッセージが出力されます。この場合、これまでの反復処理でのこの変数の値が不適切である可能性があります。SETステートメントのセマンティック動作では、最初のデータセットから最初のオブザベーションを処理する際にこの変数を欠損値に設定する必要があります。
デフォルト IMMEDIATE

POINT=variable

一時変数の名前を指定します。この変数の数値によって、読み込むオブザベーションが特定されます。POINT=オプションを指定すると、SETステートメントはランダム(ダイレクト)アクセスを使用してSASデータセットを読み込みます。

制限事項 POINT=オプションは、BYステートメント、WHEREステートメント、WHERE=データセットオプションと併用できません。また、移送用形式のデータセット、テープまたはディスク上の順次形式のデータセット、SAS/ACCESSビュー、外部ファイルからデータを読み込むSQLプロシジャビューと併用することもできません。
POINT=オプションとKEY=オプションを併用することはできません。
要件 STOPステートメント
_N_は繰り返しの回数で、最後に読み込まれたオブザべーションのオブザベーション番号ではありません。
ヒント POINT=変数の値を入力しなければなりません。たとえば、DOステートメントの一部の形式では、POINT=変数をインデックス変数として使用できます。
POINT=オプションに指定した変数はDATAステップのどの位置にでも指定できますが、新しいSASデータセットには追加されません。
1オブザベーションと複数オブザベーションを結合する

ダイレクトアクセスを用いたサブセットの読み込み

注意:
POINT=オプションを使用するときは、無限ループが発生する可能性があります。
POINT=オプションを使用する場合、DATAステップの処理を終了させるSTOPステートメント、またはPOINT=オプションに指定した変数の無効な値をチェックするプログラムロジックのどちらかまたは両方を使用する必要があります。POINT=オプションではDOステートメントに指定したオブザベーションだけを読み込むので、順次アクセスでファイルを読み込む場合とは違い、ファイル終端指示子を読み取ることができません。ファイル終端指示子を読み取ることによってDATAステップを自動的に終了させるため、POINT=オプションの使用時にDATAステップを終了させる別の方法を準備しないと、DATAステップで無限ループが発生する場合があります。POINT=オプションに指定した変数の値が無効な場合、自動変数_ERROR_の値が1に設定されます。この情報を使用すると、DOループが無限に発生する、またはSTOPステートメントがDATAステップの最後に含まれているなどの状態をチェックできます。

UNIQUE

読み込むデータセットのインデックスの先頭からKEY=オプションに指定された値の検索を開始します。

制限事項 UNIQUEはKEY=オプションを指定した場合にのみ指定できます。また、スラッシュを前に追加する必要があります。
デフォルトでは、SETステートメントは、KEY=オプションの値が変更された場合にのみインデックスの先頭から検索を開始します。
SETステートメントを繰り返し実行するときにKEY=の値が変更されない場合、最近取得したオブザベーションの直後から検索を開始します。KEY=オプションに指定した変数の値の重複が連続して存在する場合、SETステートメントは読み込み中のデータセットにある重複したインデックス付きの値に対して1対1で対応させようとします。KEY=オプションに指定した変数の値の重複が読み込み中のデータセットに存在する数よりも多い場合、それ以上の重複は検出されなかったと判断されます。
KEY=オプションに指定した変数の値が重複しない場合、最初にそのキーの値を使用してオブザベーションを読み込む場合は成功しますが、2回目以降に同じ値を使用してオブザベーションを読み込もうとすると失敗します。この場合、_IORC_変数は、SYSRC自動呼び出しマクロのニーモニック_DSENOMに対応する値を返します。/UNIQUEオプションを追加すると、初回以降でもKEY=オプションに指定した変数の重複しない値を使用してオブザベーションを正常に読み込むことができます。この場合、_IORC_変数は0を返します。
参照項目 詳細な例については、次を参照してください:Combining and Modifying SAS Data Sets:Examples
KEYRESET=variable
マスタファイルに重複するオブザベーションが含まれる場合、テーブルルックアップを実行する

詳細

SETの処理

SETステートメントを実行するたびに、1つのオブザベーションをプログラムデータべクトルに読み込みます。他の処理を指示しない限り、SETステートメントでは、すべての変数とすべてのオブザベーションを入力データセットから読み込みます。SETステートメントでは複数のデータセットを使用できます。また、1つのDATAステップには複数のSETステートメントを指定できます。Combining and Modifying SAS Data Sets:Examplesも参照してください。
注: DATAステップがファイル終端指示子に到達すると、シャットダウンが行われます。たとえば、SETステートメントをFIRSTOBSと併用すると、複数のファイルの中でヘッダレコードのみを含むファイルによって、DATAステップの通常のシャットダウンがトリガされます。このシャットダウンは、ファイル終端指示子を超えて読み込みを行うとDATAステップが終了するために発生します。END=オプションを使用すると、シャットダウンを回避することができます。

使用法

SETステートメントはプログラミング時にさまざまな方法で柔軟に使用できます。SETステートメントをオプションやステートメントと組み合わせることにより、次のことが行えます。
  • DATAステップでさらに処理を行うために、既存のSASデータセットからオブザベーションと変数の値を読み込みます。
  • データセットを連結します。データセットをインタリーブします。また、データセットの1対1の読み込みを実行します。
  • ダイレクトアクセス方式を使用してSASデータセットを読み込みます。

SETステートメントでデータセットを使用する

SETステートメントでは、データセットリストを使用できます。データセットリストを使用すると、現在存在するデータセットのグループを簡単に示せます。このデータセットリストには、名前接頭辞リストまたは番号付き範囲リストを指定する必要があります。
名前接頭辞リストは、指定した文字列で始まるすべてのデータセットを示します。たとえば、set SALES1:;と指定すると、"SALES1"で始まるSALES1、SALES10、SALES11、SALES12などのデータセットがすべて読み込まれます。
番号付き範囲リストでは、連番である最後の文字を除き、同じ名前のデータセットが存在する必要があります。番号付き範囲リストでは、開始値と終了値に任意の数値を使用してもかまいません。たとえば、次のリストは同じデータセットを示します。
sales1 sales2 sales3 sales4
sales1-sales4
注: 最初のデータセット名にある数値接尾辞の先頭に0が置かれる場合、最後のデータセット名の数値接尾辞の桁数は最初のデータセット名の桁数と一致するか、または上回る必要があります。このように指定されていない場合はエラーが発生します。たとえば、データセットリストをsales001–sales99またはsales01–sales9と指定するとエラーが発生します。ただし、このデータセットリストの有効な指定は、sales001–sales999です。最初のデータセット名にある数値接尾辞の先頭に0が置かれない場合、最初と最後のデータセット名に使用する数値接尾辞の桁数を一致させる必要はありません。たとえば、データセットリストの指定としてsales1–sales999は有効です。
番号付きデータセットリストを使用する場合に考慮すべきその他のルールを次に示します。
  • 範囲のグループを複数指定できます。
    set cost1-cost4 cost11-cost14 cost21-cost24; 
  • 番号付き範囲リストと名前接頭辞リストを組み合わせて指定できます。
    set cost1-cost4 cost2: cost33-37;
  • 個々のデータセットとデータセットリストを組み合わせて指定できます。
    set cost1 cost10-cost20 cost30;
  • データセットリストを囲んだ引用符は無視されます。
    /* these two lines are the same */
    set sales1 - sales4;
    set 'sales1'n - 'sales4'n;
  • データセット名のブランクは無効です。引用符を使用する場合、末尾にあるブランクは無視されます。
    /* blanks in these statements will cause errors */
    set sales 1 - sales 4;
    set 'sales 1'n - 'sales 4'n;
    /* trailing blanks in this statement will be ignored */
    set 'sales1   'n - 'sales4   'n;
  • 数値接尾辞に使用できる最大数は、2147483647です。
    /* this suffix will cause an error */
    set prod2000000000-prod2934850239;

SETを使用したBYグループ処理

DATAステップでは、1つのBYステートメントのみ、SETステートメントに指定できます。BYステートメントは適用するSETステートメントの直後に指定する必要があります。SETステートメントにリストされるデータセットは、BYステートメントにリストされる変数の値に基づいて並べ替えられているか、適切なインデックスが含まれている必要があります。SETステートメントはBYステートメントと使用すると、複数のデータセットをインタリーブします。新しいデータセットのオブザベーションは1つまたは複数のBY変数の値に従って並べられます。BYグループ内は、元のデータセットの順序に従って並べられます。 SETステートメントでのBYグループの処理の例については、SASデータセットのインタリーブを参照してください。

SASデータセットの結合

1つのSETステートメントに複数のデータセットを指定すると、指定したデータセットが連結されます。つまり、新しいデータセットのオブザベーション数は、指定した複数のデータセットにあるオブザベーション数の合計になります。オブザベーションは、最初のデータセットのすべてのオブザベーションの後ろに、2番目のデータセットのすべてのオブザベーションが続くという順序で配置されます。 データセットの連結の例については、SASデータセットの連結を参照してください。
1つのSETステートメントをBYステートメントとともに使用すると、指定したデータセットがインタリーブされます。新しいデータセットのオブザベーションは1つまたは複数のBY変数の値に従って並べられます。BYグループ内は、元のデータセットの順序に従って並べられます。 データセットのインタリーブの例については、SASデータセットのインタリーブを参照してください。
複数のSETステートメントを使用すると、指定したデータセットに対して1対1の読み込み(1対1マッチともいう)を行います。新しいデータセットには、すべての入力データセットの変数が格納されます。新しいデータセットに含まれるオブザベーションの数は、元のデータセットのうち最も小さなデータセットに含まれるオブザベーションの数になります。複数のデータセットに共通する変数が含まれている場合、前のデータセットから読み込んだ値を最後のデータセットから読み込んだ値で置き換えます。データセットの1対1の読み込みの例は、次を参照してください。
詳細な例については、Combining and Modifying SAS Data Sets: Examplesも参照してください。
データセットを準備する方法の詳細については、XisError: No pubcode in link data found for lrconを参照してください。

比較

  • SETステートメントでは、既存のSASデータセットからオブザベーションを読み込みます。INPUTステートメンでトは、SAS変数とオブザベーションを作成するために、外部ファイルまたはインストリームデータ行から生データを読み込みます。
  • SETステートメントでKEY=オプションを使用すると、インデックスの値に基づいて、SASデータセットのオブザベーションに非順次アクセスできます。SETステートメントでPOINT=オプションを使用すると、オブザベーションの番号に基づいて、SASデータセットのオブザベーションに非順次アクセスできます。

例1: SASデータセットの連結

SETステートメントに複数のデータセット名を指定すると、ステートメント実行後には、指定したすべてのデータセットを連結した出力データセットが作成されます。最初のデータセットからすべてのオブザベーションを読み込んだ後、2番目のデータセットからすべてのオブザベーションを読み込むというように、すべてのデータセットからすべてのオブザベーションが読み込まれます。この例では、3つのデータセットを連結して、FITNESSという1つの出力データセットを作成します。
data fitness;
   set health exercise well;
run;

例2: SASデータセットのインタリーブ

2つ以上のSASデータセットをインタリーブするには、SETステートメントの後ろにBYステートメントを使用します。
data april;
   set payable recvable;
   by account;
run;

例3: SASデータセットの読み込み

次のDATAステップでは、データセットNC.MEMBERSにある各オブザベーションをプログラムデータベクトルに読み込みます。次に、CITYの値がRaleighであるオブザベーションのみを新しいデータセットRALEIGH.MEMBERSに出力します。
data raleigh.members;
   set nc.members;
   if city='Raleigh';
run;

例4: 1つのオブザベーションをSASデータセットのすべてのオブザベーションとマージする

既存のデータセットにマージできるオブザベーションは、SASプロシジャまたは他のDATAステップで作成されたオブザベーションになります。この例では、データセットAVGSALESにはオブザベーションが1つだけ含まれます。
data national;
      if _n_=1 then set avgsales;
      set totsales;
run;

例5: 同一データセットを複数回読み込む

この例のSETステートメントは、個別に処理されます。つまり、1つのデータセットからの読み込みを、あたかも2つのデータセットからの読み込みのように処理されます。
data drugxyz;
   set trial5(keep=sample);
   if sample>2;
   set trial5;
run;
DATAステップの反復時、最初のSETステートメントからオブザベーションが1つ読み込みます。最初のSETステートメントの実行後、次のオブザベーションが読み込まれます。DATAステップの同じ反復内で、それぞれのSETステートメントから別のオブザベーションが読み込まれます。

例6: 1オブザベーションと複数オブザベーションを結合する

次に示すように、ダイレクトアクセス方式を使用すると、1つのデータセットから読み込んだ複数のオブザベーションをサブセットし、それを他のデータセットから読み込んだオブザベーションと結合できます。
data south;
   set revenue;
   if region=4;
   set expense point=_n_;
run;

例7: テーブルルックアップの実行

この例では、KEY=オプションを使用して、テーブルルックアップを実行します。このDATAステップでは、INVTORYという名前のプライマリデータセットと、PARTCODEという名前のルックアップデータセットを読み込みます。インデックスPARTNOを使用し、それぞれのデータセットで変数PARTNOに一致する値を探しながら、PARTCODEを非順次で読み込みます。これは、プライマリデータセットINVTORYに登録されているすべてのパーツについて、ルックアップデータセットPARTCODEの変数DESCのみに含まれる適切な説明を読み込むのが目的です。
data combine;
   set invtory(keep=partno instock price);
   set partcode(keep=partno desc)  key=partno;
run;

例8: マスタファイルに重複するオブザベーションが含まれる場合、テーブルルックアップを実行する

この例でも、KEY=オプションを使用して、テーブルルックアップを実行します。このDATAステップでは、インデックスPARTNOが格納されたINVTORYという名前のプライマリデータセットと、PARTCODEという名前のルックアップデータセットを読み込みます。PARTCODEの変数NEW_STKには、新しい在庫量が含まれます。UNIQUEオプションを使用することにより、INVTORYに重複する値を持つ変数PARTNOが存在する場合、重複する値を持つグループの最初のオブザベーションにのみNEW_STKの値を追加します。
data combine;
   set partcode(keep=partno new_stk);
   set invtory(keep=partno instock price) 
   key=partno/unique;
   instock=instock+new_stk;
run;

例9: ダイレクトアクセスを用いたサブセットの読み込み

次のステートメントでは、オブザベーション番号を指定してダイレクトアクセスを行うPOINT=オプションを使用し、データセットDRUGTESTから50オブザベーションのサブセットを選択します。
data sample;
   do obsnum=1 to 100 by 2;
      set drugtest point=obsnum;
      if _error_ then abort;
      output;
   end;
   stop;
run;

例10: 最終オブザベーションに到達するまで関数を実行する

次のステートメントでは、NOBS=オプションを使用し、DOループ処理を終了させる値を設定します。一時変数LASTの値は、SURVEY1およびSURVEY2のオブザベーション数の合計になります。
do obsnum=1 to last by 100;
   set survey1 survey2 point=obsnum nobs=last;
   output;
end;
stop;

例11: すべてのオブザベーション読み込み後にオブザベーションを書き込む

この例では、END=変数LASTを使用して変数REVENUEに値を割り当てるように指示します。また、RENTALの最後のオブザベーションの読み込みを終えてから、オブザベーションを出力します。
set rental end=last;
totdays + days;
if last then
   do;
      revenue=totdays*65.78;
      output;
   end;

例12: 現在のオブザベーションを読み込むデータセットの名前を取得する

この例では、3つのデータセットを作成し、dsnという名前の変数にデータセット名を格納します。名前は3つの部分に分割され、次の結果が出力されます。
/* Create some data sets to read */
data gas_price_option; value=395; run;
data gas_rbid_option; value=840; run; 
data gas_price_forward; value=275; run;
/* Create a data set D */
data d;
   set gas_price_option gas_rbid_option gas_price_forward indsname=dsn;
   /* split the data set names into 3 parts */
   commodity = scan (dsn, 2, "._");
   type = scan (dsn, 3, "._");
   instrument = scan (dsn, 4, "._");
   run;
proc print data=d;
run;
3つの部分に分割されたデータセット名
3つの部分に分割されたデータセット名

例13: データセットリストを使用する

この例では、番号付き範囲リストを使用してデータセットを入力します。
data dept008; emp=13; run;
data dept009; emp=9; run;
data dept010; emp=4; run;
data dept011; emp=33; run;
data _null_;
  set dept008-dept010;
  put _all_;
run;
次の行がSASログに書き出されます。
SETステートメントでデータセットリストを使用する
1 data dept008; emp=13; run; NOTE:The data set WORK.DEPT008 has 1 observations and 1 variables.NOTE:DATA statement used (Total process time): real time 0.06 seconds cpu time 0.03 seconds 2 data dept009; emp=9; run; NOTE:The data set WORK.DEPT009 has 1 observations and 1 variables.NOTE:DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 3 data dept010; emp=4; run; NOTE:The data set WORK.DEPT010 has 1 observations and 1 variables.NOTE:DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 4 data dept011; emp=33; run; NOTE:The data set WORK.DEPT011 has 1 observations and 1 variables.NOTE:DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 5 6 data _null_; 7 set dept008-dept010; 8 put _all_; 9 run; emp=13 _ERROR_=0 _N_=1 emp=9 _ERROR_=0 _N_=2 emp=4 _ERROR_=0 _N_=3 NOTE:There were 1 observations read from the data set WORK.DEPT008.NOTE:There were 1 observations read from the data set WORK.DEPT009.NOTE:There were 1 observations read from the data set WORK.DEPT010.NOTE:DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds
加えて、欠損しているデータセットを探すのにデータセットリストを使用することもできます。この例では、番号付き範囲リストを使用して欠損しているデータセットを探します。存在しないデータセットごとにエラーが発生します。どのデータセットが欠損しているかがわかったら、実際に存在するデータセットを指定するようにSETステートメントを修正します。
data dept008; emp=13; run;
data dept009; emp=9; run;
data dept011; emp=4; run;
data dept014; emp=33; run;
data _null_;
  set dept008-dept014;
  put _all_;
run;
次の行がSASログに書き出されます。
SETステートメントを使用した存在しないデータセットの検出
1 data dept008; emp=13; run; NOTE:The data set WORK.DEPT008 has 1 observations and 1 variables.NOTE:DATA statement used (Total process time): real time 0.04 seconds cpu time 0.04 seconds 2 data dept009; emp=9; run; NOTE:The data set WORK.DEPT009 has 1 observations and 1 variables.NOTE:DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 3 data dept011; emp=4; run; NOTE:The data set WORK.DEPT011 has 1 observations and 1 variables.NOTE:DATA statement used (Total process time): real time 0.03 seconds cpu time 0.01 seconds 4 data dept014; emp=33; run; NOTE:The data set WORK.DEPT014 has 1 observations and 1 variables.NOTE:DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 5 data _null_; 6 set dept008-dept014; ERROR:File WORK.DEPT010.DATA does not exist.ERROR:File WORK.DEPT012.DATA does not exist.ERROR:File WORK.DEPT013.DATA does not exist.7    put _all_;
8    run;
NOTE:The SAS System stopped processing this step because of errors.NOTE:DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds

例14: 現在のオブザベーション番号を調べる

次の例では、CUROBSオプションを使って現在のオブザベーションの番号を返すようにしています。
data women;
  set sashelp.class curobs=cobs;
  where sex = 'F';
  orig_obs = cobs;
run;

例15: KEYRESETオプションの使用

この例では、KEYRESET=オプションを使って、I=3が2回の時にすべての値を検索するようにしています。
data a(index=(i));
   do i = 1,2,3,3,3,4,5; 
      j=ranuni(4); 
      output; 
   end; 
run;
data _null_;
   input i;
   reset = 1;
   do while (_iorc_ = 0);
      set a key=i keyreset=reset;
      put _all_;
   end;
   _error_ = 0; _iorc_ = 0;
   datalines;
3
3
;

関連項目:

Combining and Modifying SAS Data Sets:Examples
XisError: No pubcode in link data found for ledsoptsref
XisError: No pubcode in link data found for lrcon
XisError: No pubcode in link data found for lrcon
SASマクロ言語: リファレンス
前のページ|次のページ|ページの先頭へ