1つ以上のSASデータセットからオブザベーションを読み込みます。
該当要素: | DATAステップ |
カテゴリ: | ファイル操作 |
種類: | 実行 |
注: | SETステートメントを使用して読み込まれた変数はPDVで保持されます。詳細についてはXisError: No pubcode in link data found for lrconおよび RETAINステートメントを参照してください。 |
ヒント: | SETステートメントを使用してデータを読み込む方法については、SASチュートリアルビデオSASデータセットの読み込み をご覧ください。 |
1レベル名、2レベル名、特殊SASデータセット名の1つを指定します。
ヒント | データセットのリストを指定できます。 詳細については、SETステートメントでデータセットを使用するを参照してください。 |
データセット名を使用するかわりに、オペレーティングシステムでサポートされている構文を使用してファイルの物理パス名を指定することができます。物理パス名は一重引用符または二重引用符で囲む必要があります。 | |
参照項目 | SASデータセット名のレベルと各レベルの用途については、XisError: No pubcode in link data found for lrconを参照してください。 |
例 | データセットリストを使用する |
処理対象の変数またはオブザベーションをプログラムデータベクトルに読み込むときに実行するアクションを指定します。
ヒント | データセットリストに適用するデータセットオプションは、データセットリストに存在するすべてのデータセットに適用されます。 |
参照項目 | 入力データセットに使用できるデータセットオプションの一覧については、XisError: No pubcode in link data found for ledsoptsrefを参照してください。 |
データセットから読み込んだオブザベーション数を含む変数を作成および名前を付与
例 | 現在のオブザベーション番号を調べる |
作成する一時変数の名前を指定します。この変数の値には終端指示子が格納されます。この変数の値は0に初期化されますが、SETステートメントに指定されている最後のデータセットから最後のオブザベーションを読み込むときに1に設定されます。この変数は、新しいデータセットには追加されません。
制限事項 | END=オプションはPOINT=オプションと併用できません。ランダムアクセスを使用する場合、END=に指定した変数の値は1に設定されません。 |
操作 | BYステートメントを使用する場合、インタリーブされたデータセットから最後のオブザベーションをSETステートメントが読み込むときにEND=の値が1に設定されます。 詳細については、SETを使用したBYグループ処理を参照してください。 |
例 | すべてのオブザベーション読み込み後にオブザベーションを書き込む |
インデックス変数またはキーの値に基づいて、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_変数の無効な値をチェックするプログラムロジックのどちらかまたは両方を使用する必要があります。
|
読み込むデータセットのインデックスの先頭からKEY=オプションに指定された値の検索を開始するかどうかをコントロールします。KEYRESET変数の値が1の場合、インデックスの一番上から検索します。KEYRESET変数の値が0の場合、インデックスの検索はリセットされないので、最後の検索のつづきから検索します。
操作 | KEYRESET=オプションはUNIQUEオプションに似ていますが、KEYRESET=オプションではKEY=検索をインデックスの最初からにするかどうかを決められます。 |
参照項目 | KEY=index</UNIQUE> |
UNIQUE | |
例 | KEYRESETオプションの使用 |
作成する変数の名前を指定します。この変数には、現在のオブザベーションの読み込み先となるSASデータセット名が格納されます。格納される名前はデータセット名または物理名になります。物理名には動作環境でファイルを判別できる名前を指定します。
ヒント | データセット名の場合、変数の値にライブラリ名を追加した後(例:WORK.PRICE)、この2レベル名を大文字に変換します。 |
定義されていない場合、変数の長さは41バイトに設定されます。ファイル名が41バイトより長い場合、LENGTHステートメントを使用すると、物理ファイル名を格納できる長さにまで変数の長さを拡張できます。 | |
この変数が特定の長さを指定した文字変数として定義されている場合、変数の長さは変更されません。INDSNAME変数の値が定義した長さを超えている場合、値は切り捨てられます。 | |
この変数が数値変数として定義されている場合はエラーが発生します。 | |
変数はDATAステップのどの位置にでも指定できますが、変数は出力には追加されません。 | |
例 | 現在のオブザベーションを読み込むデータセットの名前を取得する |
作成する一時変数の名前を指定します。この一時変数の値は、1つまたは複数の入力データセットの中のオブザベーションの合計数になります。SETステートメントに複数のデータセットを指定する場合、NOBS=オプションの変数の値は、指定した複数のデータセットに含まれるオブザベーションの合計数になります。オブザベーション数には、削除対象としてマークされていても、まだ削除されていないオブザベーションも含まれます。
制限事項 | 特定のSASビューとTAPEやXMLエンジンのような順次エンジンに対しては、SASがオブザベーション数を検知することができません。この場合、NOBS=オプションに指定した変数の値には、動作環境で使用できる最大の正の整数値が設定されます。 |
操作 | NOBS=オプションとPOINT=オプションは互いに独立しています。 |
ヒント | コンパイル時に、各データセットのディスクリプタ情報を読み込んでから、NOBS=オプションの変数の値を自動的に割り当てます。そのため、SETステートメントの実行前にもNOBS=オプションの変数を参照できます。この変数はDATAステップで使用できますが、出力データセットには追加されません。 |
例 | 最終オブザベーションに到達するまで関数を実行する |
処理の準備ができるまで、連結されたSASデータセットを開くことを保留できます。
コンパイル中に、SETステートメントに指定されているすべてのデータセットを開きます。
制限事項 | IMMEDIATEオプションを使用する場合、KEY=、POINT=、BYステートメントの処理を使用できますが、使用できるのはそのうち1つだけです。 |
ヒント | 後から開いたデータセットの変数の種類が最初に開いたデータセットにある同じ名前の変数の種類と異なる場合(例:最初の変数の種類が文字で後の変数の種類が数値など)、DATAステップの処理は中止され、エラーメッセージが出力されます。 |
コンパイル中に最初のデータセットを開きます。後続のデータセットは実行中に開きます。1つのDATAステップ内のすべてのオブザベーションの読み込みと処理が終了すると、そのオブザベーションを閉じてから、指定されている次のデータセットを開きます。
制限事項 | DEFERオプションを指定する場合、KEY=ステートメントオプション、POINT=ステートメントオプション、BYステートメントは使用できません。この3つによって、データセットのオブザベーションをランダムに処理するかインタリーブするかを暗示的に指定します。ただし、すべてのデータセットが開いていない場合、この処理を実行できません。 |
要件 | 変数の処理にDROP=、KEEP=、RENAME=データセットオプションを使用できますが、各データセットで処理する変数は同一の変数でなければなりません。通常、後続のデータセットで定義された変数が最初のデータセットで定義された変数と異なる場合、警告メッセージが出力されますが、処理は中止せずに行われます。
|
デフォルト | IMMEDIATE |
一時変数の名前を指定します。この変数の数値によって、読み込むオブザベーションが特定されます。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ステップの最後に含まれているなどの状態をチェックできます。
|
読み込むデータセットのインデックスの先頭から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 SALES1:;
と指定すると、"SALES1"で始まるSALES1、SALES10、SALES11、SALES12などのデータセットがすべて読み込まれます。
sales1 sales2 sales3 sales4 sales1-sales4
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;
/* this suffix will cause an error */ set prod2000000000-prod2934850239;
data fitness; set health exercise well; run;
data april; set payable recvable; by account; run;
Raleigh
であるオブザベーションのみを新しいデータセットRALEIGH.MEMBERSに出力します。 data raleigh.members; set nc.members; if city='Raleigh'; run;
data national; if _n_=1 then set avgsales; set totsales; run;
data drugxyz; set trial5(keep=sample); if sample>2; set trial5; run;
data south; set revenue; if region=4; set expense point=_n_; run;
data combine; set invtory(keep=partno instock price); set partcode(keep=partno desc) key=partno; run;
data combine; set partcode(keep=partno new_stk); set invtory(keep=partno instock price) key=partno/unique; instock=instock+new_stk; run;
data sample; do obsnum=1 to 100 by 2; set drugtest point=obsnum; if _error_ then abort; output; end; stop; run;
do obsnum=1 to last by 100; set survey1 survey2 point=obsnum nobs=last; output; end; stop;
set rental end=last; totdays + days; if last then do; revenue=totdays*65.78; output; end;
/* 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;
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;
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
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;
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
data women; set sashelp.class curobs=cobs; where sex = 'F'; orig_obs = cobs; run;
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 ;