前のページ|次のページ

SASFILEステートメント

SASデータセットを開き、ファイル全体をメモリに保持するために必要なバッファを割り当てます。

該当要素: 任意の場所
カテゴリ: プログラム制御
制限事項: SASFILEステートメントで開いたSASデータセットは、後続の入力(読み取り)処理や更新処理で使用されますが、出力処理やユーティリティ処理では使用されません。
参照項目: XisError: No pubcode in link data found for hosto390 in z/OS版SAS

構文

引数

libref

SASライブラリに関連付けられた名前を指定します。libref (ライブラリ参照名)には、有効なSAS名を指定する必要があります。デフォルトのライブラリ参照名は、USER(割り当てられている場合)またはWORK(USERが割り当てられていない場合)になります。

制限事項 ライブラリ参照名には、順次形式のライブラリを含むSASライブラリの連結を指定することはできません。

member-name

ライブラリ参照名に関連付けられたSASライブラリのメンバを示す有効なSAS名を指定します。

制限事項 SASデータセットは、V7、V8、V9 Base SAS Engineを使用して作成する必要があります。

member-type

開くSASファイルの種類を指定します。有効な値はDATAです。これがデフォルト設定になります。

password-option(s)

次のパスワードオプションを1つまたは複数指定します。

ENCRYPTKEY=key-value

SASFILEステートメントでAES (Advanced Encryption Standard)で暗号化されたSASデータファイルを開きます。SASデータファイルがAES (Advanced Encryption Standard) アルゴリズムで暗号化されている場合、ファイルにアクセスするにはファイルに割り当てられているキー値を指定しなければなりません。キー値は最大で64バイト長になります。

操作 AES暗号化のSASデータファイルにENCRYPTKEY=オプションを指定しない場合、ダイアログボックスが表示されキー値の指定を促します。
参照項目 XisError: No pubcode in link data found for lrcon

READ=password

SASFILEステートメントで読み取り保護が設定されたファイルを開くことができます。passwordには、有効なSAS名を指定する必要があります。

WRITE=password

SASFILEステートメントでWRITEパスワードを使用して、読み取り保護と書き込み保護の両方が設定されたファイルを開くことができます。passwordには、有効なSAS名を指定する必要があります。

ALTER=password

SASFILEステートメントでALTERパスワードを使用して、読み取り保護と変更保護の両方が設定されたファイルを開くことができます。passwordには、有効なSAS名を指定する必要があります。

PW=password

SASFILEステートメントでパスワードを使用して、すべてのレベルの保護が設定されたファイルを開くことができるようにします。passwordには、有効なSAS名を指定する必要があります。

ヒント SASFILEステートメントの実行時、ファイルに読み取り保護が設定されているかどうかがチェックされます。そのため、ファイルに読み取り保護が設定されている場合、SASFILEファイルステートメントにREAD=パスワードを指定する必要があります。ファイルに書き込み保護または変更保護が設定されている場合、WRITE=、ALTER=、PW=の各パスワードを使用できます。ただし、ファイルは入力(読み取り)モードのみで開かれます。また、後続の処理では、必要なパスワードを1つまたは複数指定する必要があります。この出力の内容についてはSASFILEステートメントでパスワードを指定するを参照してください。

OPEN

ファイルを開き、バッファを割り当てます。ただし、プロシジャ、ステートメント、アプリケーションが実行されるまでメモリへのデータの読み込みを保留します。

LOAD

ファイルを開き、バッファを割り当ててから、データをメモリに読み込みます。

注: 許可されているバッファの合計数がファイルに必要なバッファ数(データセットのページ数やインデックスファイルのページ数に基づいて算出)よりも少ない場合、メモリに読み込むページ数を示す警告が発行されます。

CLOSE

バッファを解放し、ファイルを閉じます。

詳細

概要情報

SASFILEステートメントではSASデータセットを開き、ファイル全体をメモリに保持するために必要なバッファを割り当てます。ファイルが読み込まれると、データはメモリに保持されます。保持されたデータは、2番目のSASFILEステートメントでファイルを閉じてバッファを解放するか、プログラムの終了によりファイルを自動的に閉じてバッファを解放するまで、後続のDATAステップまたはPROCステップで使用できます。
SASFILEステートメントを使用すると、次の削減によってパフォーマンスが改善されます。
  • SASデータを処理するために複数回開く/閉じる操作(バッファに対するメモリの割り当てや解放も含む)を、1回の開く/閉じる操作に減らします。
  • データをメモリに保持してI/O処理を実行します。
SASプログラムが、SASデータセットを複数回読み込むステップで構成され、ファイル全体を実メモリに保持するのに十分なメモリがある場合、プログラムでSASFILEステートメントを使用すると便利です。また、SASFILEは、SAS/SHARE ServerなどのSAS Serverを起動するプログラムの一部として特に役立ちます。ただし、ご使用の環境でテストを設定し、SASFILEステートメント使用時と未使用時のパフォーマンスを計測することをお勧めします。

SASFILEステートメントで開いたSASデータセットを処理する

SASFILEステートメントを実行すると、指定したファイルが開かれます。後続のDATAステップまたはPROCステップの実行時、リクエストごとにファイルを開きません。2番目のSASFILEステートメントでファイルを閉じるか、プログラムまたはセッションが終了するまでファイルは開いたままの状態になります。
SASFILEステートメントでSASデータセットを開くと、ファイルは入力処理モードで開かれます。そのため、後続の入力処理や更新処理でこのファイルを使用できます。ただし、ユーティリティ処理や出力処理ではファイルに対して排他的アクセス(メンバレベルのロック)が必要になります。そのため、後続のユーティリティ処理または出力処理ではこのファイルを使用できません。たとえば、ファイルの置き換えや、変数名の変更は実行できません。
SASプロシジャおよびステートメントの一覧とSASFILEステートメントでファイルを開いた場合に処理が許可されるかどうかを次の表に示します。
SASFILEで開いたファイルに対するリクエストの処理
リクエストの処理
ファイルを開くときのモード
許可状況
APPENDプロシジャ
更新
許可
ファイルの作成や置き換えを行うDATAステップ
出力
不許可
変数名の変更や変数の追加、ラベルの追加や変更、一貫性制約またはインデックスの追加や削除を行うDATASETSプロシジャ
ユーティリティ
不許可
AGE、CHANGE、DELETEステートメントを含むDATASETSプロシジャ
ファイルは開かないが、排他的アクセスが必要
いいえ
FSEDITプロシジャ
更新
許可
PRINTプロシジャ
入力
許可
元のデータセットを並べ替え済みのデータセットに置き換えるSORTプロシジャ
出力
不許可
オブザベーションの変更、追加、削除を行うSQLプロシジャ
更新
許可
CREATE TABLEまたはCREATE VIEWステートメントを含むSQLプロシジャ
出力
不許可
一貫性制約またはインデックスの作成や削除を行うSQLプロシジャ
ユーティリティ
不許可

バッファの割り当て

バッファとは、データ処理中にデータのセグメントの保持に使用する予約されたメモリ領域です。割り当てるバッファ数によって、1度にメモリに保持できるデータ量が特定されます。
バッファ数はSASファイルに恒久的に割り当てられる属性ではありません。つまり、バッファ数は現在のSASセッションまたはジョブの実行中のみ有効です。SASファイルを開くと、ファイル処理に使用するバッファ数のデフォルト値が設定されます。デフォルト値はご使用の環境によって変わりますが、通常は小さい数字になります。特定のバッファ数を指定するには、BUFNO=システムオプションまたはデータセットオプションを使用します。
SASFILEステートメントを実行すると、データセットのページ数やインデックスファイルのページ数(インデックスファイルが存在する場合)に基づいて、バッファ数が自動的に割り当てられます。次に例を示します。
  • データセットのページ数が5でインデックスファイルが存在しない場合、5バッファが割り当てられます。
  • データセットのページ数が500でインデックスファイルのページ数が200の場合、700バッファが割り当てられます。
メモリに保持されるファイルのサイズが処理中に大きくなる場合、ファイルを格納するために割り当てるバッファ数も増えます。SASデータセットに対してSASFILEステートメントを実行する場合、BUFNO=オプションは無視されます。

I/O処理

I/O(入力/出力)リクエストにより、ストレージデバイス(例:ディスク)からデータのセグメントが読み込まれ、そのデータがメモリに転送されます。また、反対に、メモリからデータが転送され、そのデータがストレージデバイスに書き込まれます。SASFILEステートメントでSASデータセットを開くと、データを1度読み込んでからメモリに保持するので、I/Oリクエストの数を減らすことができます。
注意:
ただし、I/O処理を減らすことができるのは、実メモリが十分に存在する場合のみです。
SASデータセットが大きい場合、ファイル全体を保持するのに必要なだけ実メモリを割り当てられない場合があります。十分なメモリが存在しない場合、動作環境によって実在するよりも多くメモリが割り当てられます。これは仮想メモリと呼ばれます。仮想メモリが発生すると、データアクセスI/OリクエストはスワッピングI/Oリクエストに置き換えられます。そのため、パフォーマンスは改善されません。また、SASと動作環境の両方に割り当て可能な最大メモリサイズが設定されています。プログラムで必要な場合には、このサイズ以上のメモリを割り当てることができます。プログラムで使用可能なサイズ以上のメモリが必要になると、メモリを解放するため、割り当て済みのバッファ数がデフォルトのバッファ数まで減らされます。
ヒント
SASデータセットに必要なメモリサイズを特定するには、そのファイルに対してCONTENTSプロシジャを実行し、ページサイズ、データセットのページ数、インデックスファイルのサイズ、インデックスファイルのページ数を取得します。

SAS/SHARE環境でSASFILEステートメントを使用する

SAS/SHAREでSASFILEステートメントを使用する場合の注意点を以下に示します。
  • PROC SERVERステートメントを実行する前に、SASFILEステートメントを実行する必要があります。
  • クライアント(SASセッションを使用してSAS/SHARE Serverにアクセスするコンピュータ)からSASFILEステートメントを実行すると拒否されます。
  • SASFILEステートメントを実行すると、後から同じファイルを開くすべてのユーザーは、ディスク上に格納されているファイルではなく、メモリに保持されたデータにアクセスすることになります。
  • SASFILEステートメントを実行すると、SAS/SHARE Serverが終了するまで、ファイルを閉じてバッファを解放することはできません。
  • ファイルの一部をメモリに読み込む他の方法として、PROC SERVERステートメントでALLOCATE SASFILEコマンドを使用できます(BUFNO=オプションで制御)。
  • SASFILEステートメントを実行してから、ALLOCATE SASFILEコマンドにSASFILEステートメントで割り当てたよりも多いバッファ数をBUFNO=に指定して実行すると、パフォーマンスは改善されません。

比較

  • 特定のバッファ数を指定するには、BUFNO=システムオプションまたはデータセットオプションを使用します。
  • SAS/SHAREでは、PROC SERVERステートメントにALLOCATE SASFILEコマンドを使用して、ファイルの一部をメモリに読み込むことができます(BUFNO=オプションで制御)。

例1: 複数のステップを含むプログラムでSASFILEステートメントを使用する

次のSASプログラムは、SASデータを開いてから、そのデータをメモリに転送し、メモリに保持されたデータを複数のタスクで読み込むプロセスを示しています。このプログラムはファイルを複数回読み込むステップで構成されています。
libname mydata 'SAS-library';
sasfile mydata.census.data open;1 
data test1; 
   set mydata.census;2 
run;
data test2; 
   set mydata.census;3 
run;
proc summary data=mydata.census print;4 
run;
data mydata.census;5 
   modify mydata.census; 
   .
   . (statements to modify data)
   .
run;
sasfile mydata.census close;6 
1 SASデータセットMydata.Censusを開き、データセットのページ数とインデックスファイルのページ数に基づいてバッファ数を割り当てます。
2 Mydata.Censusのページをすべて読み込み、すべてのデータをディスクからメモリに転送します。
3 Mydata.Censusの2回目の読み込みを行いますが、今回はI/Oリクエストを実行せず、メモリから読み込みます。
4 Mydata.Censusの3回目の読み込みを行います。今回もI/Oリクエストを実行せず、メモリから読み込みます。
5 Mydata.Censusの4回目の読み込みを行います。今回もI/Oリクエストを実行せず、メモリから読み込みます。MODIFYステートメントによってメモリ内のデータが正常に変更されると、変更されたデータがDATAステップの最後にメモリからディスクに転送されます。
6 Mydata.Censusを閉じてから、割り当てたメモリを解放します。

例2: SASFILEステートメントでパスワードを指定する

次のSASプログラムは、SASFILEステートメントを使用し、読み取り保護と変更保護の両方が設定されているSASデータセットのパスワードを指定する例を示しています。
libname mydata 'SAS-library';
sasfile mydata.census (read=gizmo) open;1  
proc print data=mydata.census (read=gizmo);2  
run;
data mydata.census;
   modify mydata.census (alter=luke);3 
   .
   . (statements to modify data)
   .
run;
1 SASFILEステートメントで読み取りパスワードを指定します。これは、ファイルを開くために使用します。
2 PRINTプロシジャでは、読み取りパスワードを再度指定する必要があります。
3 MODIFYステートメントでは、データセットが更新されるので、変更パスワードを使用します。
注: この例では、READパスワードのかわりに、権限レベルが高いALTERパスワードを使用することができます。

関連項目:

SAS/SHARE環境でSASFILEステートメントを使用する場合の詳細については、XisError: No pubcode in link data found for shrrefを参照してください。
データセットオプション:
XisError: No pubcode in link data found for ledsoptsref
システムオプション:
XisError: No pubcode in link data found for lesysoptsref
前のページ|次のページ|ページの先頭へ