前のページ|次のページ

FILEステートメント

PUTステートメントの現在の出力ファイルを指定します。

該当要素: DATAステップ
カテゴリ: ファイル操作
種類: 実行
制限事項: SASがロックダウン状態にある場合、ロックダウンパスリストに含まれていないファイルに関しては、FILENAMEステートメントを使用できません。詳細については、XisError: No pubcode in link data found for lrconを参照してください。
参照項目: FILEステートメントXisError: No pubcode in link data found for hostwinXisError: No pubcode in link data found for hostunx、およびXisError: No pubcode in link data found for hosto390

構文

引数

file-specification

DATAステップのPUTステートメントの出力先に使用する外部ファイルを指定します。file-specificationには、次の形式を指定できます。

'external-file'

外部ファイルの物理名を一重引用符で囲んで指定します。物理名には動作環境でファイルを判別できる名前を指定します。

ファイル参照名

外部ファイルのファイル参照名を指定します。

要件 filerefは、FILENAMEステートメントまたはFILENAME関数を使用するか、適切な動作環境のコマンドを使用して、あらかじめ前のステップで外部ファイルに関連付けておく必要があります。実行時にfilerefを割り当てる唯一の方法は、FILEステートメントでFILEVAR=オプションを使用することです。
参照項目 FILENAMEステートメント

fileref(file)

ファイルの集約記憶域を表す外部ファイルに事前に割り当てられているファイル参照名を指定します。ファイル参照名の後ろに続けて、対応する集約記憶域に含まれているファイル名またはメンバ名をかっこで囲んで指定します。

要件 filerefは、FILENAMEステートメントまたはFILENAME関数を使用するか、適切な動作環境のコマンドを使用して、あらかじめ前のステップで外部ファイルに関連付けておく必要があります。
動作環境 複数のファイルをまとめて保存する集約記憶域の名前は、ディレクトリ、MACLIB、区分データセットなど、動作環境によって異なります。詳細については、各動作環境向けのSASドキュメントを参照してください。
集約記憶域に格納されているファイルの名前が有効なSAS名ではない場合は、その名前を引用符で囲む必要があります。
参照項目 FILENAMEステートメント

LOG

予約済みのファイル参照名です。PUTステートメントで生成される出力をSASログに表示するように指示します。

DATAステップの実行を開始するたびに、PUTステートメントの出力先を指定するファイル参照名を自動的にLOGに設定します。そのため、FILEステートメントで別の出力先を指定しない限り、DATAステップの最初のPUTステートメントで生成される出力は、必ずSASログに出力されます。
ヒント デフォルトでは、出力行はSASログに書き込まれます。そのため、FILE LOGステートメントを使用するのは、変更した出力先をデフォルトの設定へ戻す場合、他のFILEステートメントオプションを指定する場合です。

PRINT

予約済みのファイル参照名です。PUTステートメントで生成される出力を、SASプロシジャで生成される出力と同じファイルに出力するように指示します。

操作 ファイルへ出力する場合、N=オプションの値は1またはPAGESIZEとする必要があります。
動作環境 ファイルに出力されるキャリッジコントロール文字は、動作環境によって異なる場合があります。詳細については、各動作環境向けのSASドキュメントを参照してください。
ヒント ファイル参照名にPRINTを指定した場合、キャリッジコントロール文字を使用して、出力ファイルの特性にあった出力を行われます。
参照項目 ファイル出力の詳細に関する説明 - SAS言語リファレンス: 解説編
ヒント file-specificationに指定したディレクトリにファイルが存在しない場合、ファイルが作成されます。file-specificationに指定したディレクトリが存在しない場合、SYSERRマクロ変数が設定されます。この変数は、ERRORCHECKオプションがSTRICTに設定されているかどうかを調べます。

device-type

デバイスの種類またはアクセス方式を指定します。これは、ファイル参照名が入出力デバイスや物理ファイルではない場所を参照している場合に使用されます。

ACTIVEMQ

このアクセス方式を指定すると、ActiveMQメッセージブローカーへアクセスできます。

操作 DATAステップでアクセス方式のオプションを認識できない場合、DATAステップはこのオプションをアクセス方式に渡して処理します。
参照項目 XisError: No pubcode in link data found for appmsgdg

CATALOG

CATALOGアクセス方式を指定します。

操作 DATAステップでアクセス方式のオプションを認識できない場合、DATAステップはこのオプションをアクセス方式に渡して処理します。
参照項目 CATALOGアクセス方式で指定可能なオプションの一覧については、FILENAMEステートメント、CATALOGアクセス方式を参照してください。

CLIPBOARD

CLIPBOARDアクセス方式を指定します。

操作 DATAステップでアクセス方式のオプションを認識できない場合、DATAステップはこのオプションをアクセス方式に渡して処理します。
参照項目 CLIPBOARDアクセス方式で指定可能なオプションの一覧については、FILENAMEステートメント、CLIPBOARDアクセス方式を参照してください。

DISK

デバイスがディスクドライブであると指定します。

ヒント ディスク上のファイルにファイル参照名を割り当てる場合、DISKを指定する必要はありません。

DUMMY

ファイルへの出力を破棄するように指定します。

ヒント テストを実行する場合はDUMMYを指定すると便利です。

FTP

FTPアクセス方式を指定します。

操作 DATAステップでアクセス方式のオプションを認識できない場合、DATAステップはこのオプションをアクセス方式に渡して処理します。
参照項目 FTPアクセス方式で指定可能なオプションの一覧については、FILENAMEステートメント、FTPアクセス方式を参照してください。
infile dummy ftp user='myuid' pass='xxxx' filevar=file_to_read;

HADOOP

Hadoopアクセス方式を指定します。

操作 DATAステップでアクセス方式のオプションを認識できない場合、DATAステップはこのオプションをアクセス方式に渡して処理します。
参照項目 Hadoopアクセス方式で指定可能なオプションの一覧については、FILENAMEステートメント、Hadoopアクセス方式を参照してください。

GTERM

出力デバイスの種類がグラフィックデータを受信するグラフィックデバイスであると指定します。

JMS

Java Message Service (JMS) の送信先を指定します。

PIPE

名前の付いていないパイプを指定します。

動作環境 一部の動作環境では、パイプはサポートされていません。

PLOTTER

バッファなしのグラフィック出力デバイスを指定します。

PRINTER

プリンタまたはプリンタスプールファイルを指定します。

SFTP

SFTPアクセス方式を指定します。

操作 DATAステップでアクセス方式のオプションを認識できない場合、DATAステップはこのオプションをアクセス方式に渡して処理します。
参照項目 SFTPアクセス方式で指定可能なオプションの一覧については、FILENAMEステートメント、SFTPアクセス方式を参照してください。

SOCKET

SOCKETアクセス方式を指定します。

操作 DATAステップでアクセス方式のオプションを認識できない場合、DATAステップはこのオプションをアクセス方式に渡して処理します。
参照項目 SOCKETアクセス方式で指定可能なオプションの一覧については、FILENAMEステートメント、SOCKETアクセス方式を参照してください。

TAPE

テープドライブを指定します。

TEMP

ファイル名が割り当てられている間だけ存在する一時ファイルを作成します。この一時ファイルは論理名からのみアクセスできます。また、論理名が存在する間だけ使用できます。

制限事項 物理パス名は指定しないでください。物理パス名を指定するとエラーが発生します。
ヒント TEMPデバイスで操作するファイルは、DISKファイルに対して、同じ属性を保有し、同じように動作します。

TERMINAL

ユーザーの端末を指定します。

UPRINTER

ユニバーサル印刷プリンタの定義名を指定します。

ヒント FILENAMEステートメントにプリンタ名を指定しない場合、PRINTERPATHオプションによって、使用するユニバーサルプリンタと出力先が制御されます。

URL

URLアクセス方式を指定します。

操作 DATAステップでアクセス方式のオプションを認識できない場合、DATAステップはこのオプションをアクセス方式に渡して処理します。
参照項目 URLアクセス方式で指定可能なオプションの一覧については、FILENAMEステートメント、URLアクセス方式を参照してください。

WEBDAV

WEBDAVアクセス方式を指定します。

操作 DATAステップでアクセス方式のオプションを認識できない場合、DATAステップはこのオプションをアクセス方式に渡して処理します。
参照項目 WEBDAVアクセス方式で指定可能なオプションの一覧については、FILENAMEステートメント、WebDAVアクセス方式を参照してください。
別名 DEVICE=device-type
デフォルト DISK
要件 device-typeまたはDEVICE=device-typeは、ステートメントのfile-specificationの直後に記述する必要があります。
動作環境 指定するデバイスによっては、さらに情報を指定することが必要になる場合があります。DISK以外の値を指定する前に、各動作環境向けのSASドキュメントを参照してください。動作環境によっては、ここで説明した値の他に使用できる値が存在する場合があります。

オプション

BLKSIZE=block-size

出力ファイルのブロックサイズを指定します。

デフォルト ご使用の動作環境によって異なります。詳細については、各動作環境向けのSASドキュメントに記載されているFILEステートメントを参照してください。

COLUMN=variable

変数名を指定します。指定した変数の値は、ポインタの現在の列位置を示す値に設定されます。この変数は、自動変数と同じようにデータセットに書き込まれません。

別名 COL=
参照項目 LINE=

DELIMITER= delimiter(s)

リスト出力のdelimiterに使用する、ブランクのかわりの区切り文字を指定します。使用できる区切り文字は次の通りです。

'list-of-delimiting-characters'

区切り文字として出力する文字を1つまたは複数指定します。

要件 指定する区切り文字のリストは引用符で囲む必要があります。

character-variable

文字変数の名前を指定します。指定した変数の値が区切り文字として使用されます。

別名 DLM=
デフォルト ブランク
制限事項 文字列や文字変数を指定することはできますが、区切り文字として使用されるのは、指定した文字列や変数の最初の1文字だけです。FILE DLM=の処理は、INFILE DELIMITER=の処理とは異なります。
操作 出力に区切り文字を含める場合は、区切り文字を区別するDSDオプションを指定する必要があります。
ヒント DELIMITER=オプションはコロン(:)修飾子と併用できます(修飾リスト出力)。
区切り文字では大文字と小文字が区別されます。
参照項目 DLMSTR= delimiter およびDSD (区切り文字を区別するデータ)

DLMSOPT= 'T' |'t'

DLMSTR=Tオプションの解析オプションを指定します。指定すると、区切り文字の末尾にあるブランクを削除します。

要件 DLMSOPT=Tオプションは、DLMSTR=オプションを使用している場合にのみ有効です。
ヒント DLMSOPT=Tオプションは、区切り文字として変数を使用する場合に便利です。
参照項目 DLMSTR=

DLMSTR= delimiter

リスト出力のdelimiter(ブランクのかわりの区切り文字)として使用する文字列を指定します。使用できる区切り文字は次の通りです。

'delimiting-string'

区切り文字として出力する文字列を指定します。

要件 文字列は引用符で囲みます。

character-variable

文字変数の名前を指定します。指定した変数の値が区切り文字として使用されます。

デフォルト ブランク
操作 FILEステートメントにDLMSTR=オプションを複数指定すると、最後に指定したDLMSTR=オプションが使用されます。DELIMITER=オプションとDLMSTR=オプションの両方を指定すると、最後に指定したオプションが使用されます。
RECFM=Nを指定する場合は、サイズが大きい入力項目でも十分に保持できる値がLRECLに指定されていることを確認してください。指定した値が十分ではない場合、区切り文字によってレコード境界間で分割される場合があります。
参照項目 DELIMITER=DLMSOPT=、およびDSD

DROPOVER

FILEステートメントのLINESIZE=オプションまたはLRECL=オプションに指定した出力行の長さを超えるデータを切り捨てます。

デフォルトでは、現在の行の長さを超えるデータは、新しい行に書き込まれます。一方、DROPOVERを指定すると、現在の行に新しいデータ項目を書き出すスペースがなければ、そのデータ項目全体が切り捨てられます(または無視されます)。項目全体が切り捨てられる場合、カラムポインタは、現在の行の最後の値を書き出した位置に留まります。十分なスペースが残っているか、カラムポインタの位置を元に戻すと、PUTステートメントで別の項目を現在の行に書き出せます。データ項目が切り捨てられても、DATAステップの実行は正常に続行されます(自動変数_ERROR_=0)。DATAステップの最後に、どのデータが切り捨てられたかを示すメッセージが各ファイルに対して出力されます。
デフォルト FLOWOVER
ヒント DROPOVERオプションは、PUTステートメントで現在指定されている行の長さを超えて書き込みを行おうとした場合に、現在の長さを超えたデータ項目を新しい行に出力しない場合に使用します。
参照項目 FLOWOVER およびSTOPOVER

DSD (区切り文字を区別するデータ)

タブやカンマなどの区切り文字を含むデータ値を一重引用符で囲むように指定します。DSDオプションでは、区切り文字を含むデータ値をリスト出力に書き込むことができます。このオプションは他の種類の出力(例:フォーマット出力、カラム出力、名前付き出力)では無視されます。データ値に含まれる二重引用符は2回繰り返されます。変数の値に区切り文字が含まれ、FILEステートメントにDSDを指定する場合、変数の値は出力が生成されるときに二重引用符で囲まれます。例として、次のコードを示します。

DATA _NULL_;
  FILE log dsd;
  x='"lions, tigers, and bears"';
  put x ' "Oh, my!"';
run;
出力結果は次のようになります。
"""lions, tigers, and bears""", "Oh, my!"
引用符で囲まれている(テキスト)文字列に区切り文字が含まれ、FILEステートメントにDSDが指定されている場合、引用符を含む文字列はPUTステートメントを実行するときに二重引用符で囲まれません。例として、次のコードを示します。
DATA _NULL_;
  FILE log dsd;
  PUT 'lions, tigers, and bears';
run;
出力結果は次のようになります。
lions, tigers, and bears
操作 DSDを指定する場合、デフォルトの区切り文字はカンマ(,)です。別の区切り文字を使用する場合は、DELIMITER=オプションまたはDLMSTR=オプションを指定します。
ヒント デフォルトでは、指定した区切り文字を含まないデータ値は引用符で囲まれません。ただし、チルダ(~)修飾子を使用すると、欠損値を含むすべてのデータ値が引用符で囲まれます。その場合、区切り文字を含まないデータ値も引用符で囲まれます。
参照項目 DELIMITER=およびDLMSTR=

ENCODING= 'encoding-value'

出力ファイルへの書き込み時に使用するエンコーディングを指定します。ENCODING=の値は、出力ファイルのエンコーディングが現在のセッションエンコーディングとは異なることを示しています。

出力ファイルにデータを書き込む場合は、セッションエンコーディングから指定したエンコーディングにデータがトランスコードされます。
デフォルト SASは、現在のセッションエンコーディングを使用します。
参照項目 XisError: No pubcode in link data found for nlsref
出力ファイル書き込み時のエンコードの指定

FILENAME=variable

文字変数の名前を指定します。指定した変数の値には、PUTステートメントの出力で現在開いているファイルの物理名が設定されます。物理名には動作環境でファイルを判別できる名前を指定します。

ヒント この変数は、自動変数と同じようにデータセットに書き込まれません。
文字変数のデフォルトの長さは8文字です。変数の長さが8バイトよりも長い場合、LENGTHステートメントを使用して物理ファイル名の値を格納できるように十分な長さに設定してください。
参照項目 FILEVAR=
現在の出力ファイルの識別

FILEVAR=variable

変数の名前を指定します。この変数の値が変化すると、FILEステートメントは現在の出力ファイルを閉じます。FILEステートメントを次に実行するときに、新しいファイルを開きます。次のPUTステートメントの出力先は、FILEVAR=オプションの変数の値に指定した新しいファイルになります。

制限事項 FILEVAR=オプションの変数の値には、物理ファイル名を含む文字列を指定します。
操作 FILEVAR=オプションを使用すると、file-specificationは、実際のファイル名またはファイルに対して事前に割り当てられたファイル参照名ではなく、プレースホルダになります。このプレースホルダを使用して、処理情報をSASログに出力します。プレースホルダには、ファイル参照名と同じルールが適用されます。
ヒント この変数は、自動変数と同じようにデータセットに書き込まれません。
文字変数のデフォルトの長さは8文字です。8文字を超える物理ファイル名がある場合、LENGTHステートメントやINPUTステートメントなどの他のステートメントを使用して、FILEVAR=オプションの変数に十分な長さを割り当ててください。
参照項目 FILENAME=
現在の出力ファイルを動的に変更する

FLOWOVER

現在の行の長さを超えるデータは、新しい行に書き込まれます。指定した行の最大長(FILEステートメントのLINESIZE=オプションに指定)を超える書き込みをPUTステートメントが行う場合、現在の出力行をファイルに出力した後、現在の行の長さを超えるデータ項目は新しい行に書き込まれます。

デフォルト FLOWOVER
操作 PUTステートメントに後置@が含まれる場合、ポインタは新しい行のデータ項目を出力した後の位置で停止します。そのため、次のPUTステートメントは、同じ行に書き込むことができます。このプロセスは、入力データの最後に到達するか、または後置@を指定しないPUTステートメントによって現在の行がファイルに書き込まれるまで継続します。
参照項目 DROPOVER およびSTOPOVER

FOOTNOTES | NOFOOTNOTES

現在定義されているフットノートを出力するかどうかを制御します。

別名 FOOTNOTE | NOFOOTNOTE
デフォルト NOFOOTNOTES
要件 DATAステップで出力するレポートにフットノートを出力するには、FILEステートメントにFOOTNOTEオプションを指定する必要があります。

HEADER=label

ステートメントラベルを定義します。このラベルは、新しいページへの出力を開始するたびに実行するSASステートメントのグループを特定します。

制限事項 ラベルの後ろに記述する最初のステートメントは、実行ステートメントにする必要があります。それ以降は、任意のステートメントを使用できます。
HEADER=オプションは、出力ファイルに書き込む場合やPRINT=オプションを含める場合にのみ使用します。
ヒント このグループのステートメントがDATAステップの反復のたびに実行されるのを防ぐには、RETURNステートメントを2つ使用します。1つはラベルの前に記述し、もう1つはグループの最後のステートメントとして記述します。
新規ページの開始時にステートメントを実行する

LINE=variable

変数の名前を指定します。ここに指定した変数の値には、出力ポインタを移動できる行範囲での現在の相対行番号が設定されます。変数名を指定すると、値が自動的に割り当てられます。

範囲 1からN=オプションまたは#n行ポインタコントロールに指定した値。どちらも指定されていない場合、LINE=変数の値は1になります。
ヒント この変数は、自動変数と同じようにデータセットに書き込まれません。
LINE=に指定した変数の値は、PUTステートメントの実行の最後に、次に出力できる行の番号に対して設定されます。

LINESIZE=line-size

レポートの1行あたりの最大列数、およびデータファイルの最大レコード長を設定します。

別名 LS=
デフォルト LINESIZE=オプションのデフォルト値は次の2つのオプションのどちらかによって決定されます。1) キャリッジコントロール文字を含むファイルまたはSASログに書き込む場合は、LINESIZE=システムオプションによってデフォルト値が決まります。または2)ファイルに書き込む場合は、LRECL=オプションによってデフォルト値が決まります。
範囲 最小値は64です。最大値は動作環境で許容されている最大論理レコード長です。
操作 LINESIZE=オプションで指定した行の長さを超えるデータの出力をPUTステートメントが要求した場合の措置は、FLOWOVERオプション、DROPOVERオプション、STOPOVERオプションのうち、どのオプションが指定されているかによって異なります。デフォルト(FLOWOVER)では、データを複数の行に分けて書き出します。
動作環境 LINESIZE=オプションで許容される最大値は、動作環境によって異なります。詳細については、各動作環境向けのSASドキュメントを参照してください。
LINESIZE=オプションには、行のうちデータの出力に使用する長さを指定します。LRECL=オプションには、ファイルの物理的な長さを指定します。
参照項目 LRECL=DROPOVERFLOWOVER、およびSTOPOVER
出力行が出力ファイルの行の長さを超える場合

LINESLEFT=variable

現在のページの残りの行数を格納する変数の名前を指定します。指定した変数には、現在のページの残りの行数の値が自動的に割り当てられます。LINESLEFT=変数の値は、PUTステートメントの実行終了時に設定されます。

別名 LL=
ヒント この変数は、自動変数と同じようにデータセットに書き込まれません。
現在のページに残っている行数に基づき新規ページを決定する

LRECL=logical-record-length

出力ファイルの論理レコード長を指定します。

デフォルト LRECL=オプションの指定を省略すると、動作環境のファイル特性に応じた値が選択されます。
操作 かわりに、XisError: No pubcode in link data found for lesysoptsrefを使用すると、グローバルな論理レコード長を指定できます。SAS 9.4では、グローバルLRECLシステムオプションのデフォルト値は32767です。固定長レコード(RECFM=F)を使用する場合、LRECLのデフォルト値は256になります。
動作環境 logical-record-lengthの値は動作環境によって異なります。詳細については、各動作環境向けのSASドキュメントを参照してください。
LINESIZE=オプションには使用するレコードの長さを指定します。LRECL=オプションには出力ファイルの物理的な長さを指定します。
参照項目 LINESIZE=PAD、およびPAGESIZE=

MOD

ファイル内の既存の行の後に出力行を書き出します。

デフォルト OLD
制限事項 MODオプションは、すべての動作環境で使用できるわけではありません。詳細については、使用している動作環境に対応するSASドキュメントを参照してください。
リスト出力以外のODS出力先にMODオプションを使用しないでください。使用すると、予期しない結果が出力される場合があります。
参照項目 OLD

N=available-lines

DATAステップの現在の反復で出力ポインタの移動に使用できる行数を指定します。available-linesには、数値(n)を指定するか、またはキーワードPAGESIZEやPSを指定できます。

n

出力ポインタの移動に使用できる行数を指定します。指定した行数の範囲内で出力中にポインタを前後に動かしてから、ポインタを次の範囲に移動します。

PAGESIZE

このキーワードを指定すると、出力ポインタをページ全体で移動できます。

別名 PS
制限事項 N=PAGESIZEの指定は、出力を表示する場合にのみ有効です。
現在のファイルが出力先のファイルの場合、available-linesには、1またはPAGESIZEのどちらかの値を指定する必要があります。
操作 出力ポインタの移動に使用できる行数を制御する場合、N=オプション使用するだけでなく、PUTステートメントで#n行ポインタコントロールを使用することもできます。
N=オプションの指定を省略し、行ポインタコントロール#を使用しない場合、移動できる範囲は1行です。つまり、デフォルトではN=1に設定されます。N=オプションを使用せず、行ポインタコントロール#を使用する場合、現在のDATAステップのPUTステートメントで使用した行ポインタコントロール#のうち、最大値がN=の値に割り当てられます。
ヒント N=PAGESIZEに設定すると、複数の列を含んだページの出力で、列ごとの出力ができます。
ページ全体のコンテンツを配置する

ODS < = (ODS-suboptions) >

ODS(Output Delivery System)を使用してDATAステップの出力をフォーマットします。ここでは、データコンポーネントの構造を定義し、DATAステップの結果を保持します。また、そのコンポーネントをテーブル定義に関連付け、出力オブジェクトを生成します。ODSはこのオブジェクトを開かれているすべてのODS出力先に送信し、それぞれの出力先で出力が適切にフォーマットされるようにします。ODS-suboptionsおよびODS (Output Delivery System)の詳細については、XisError: No pubcode in link data found for odsugを参照してください。

デフォルト ODS-suboptionsの指定を省略すると、DATAステップでは、SASHELP.TMPLMSTテンプレートストアに格納されているデフォルトのテーブル定義(base.datastep.table)が使用されます。この定義では2つの標準的な列を定義します。1つは文字変数用、もう1つは数値変数用です。ODSではDATAステップにあるそれぞれの変数を2つの列のどちらかに関連付け、DATAステップで定義された順にその変数を表示します。
ODS-suboptionsを指定しない場合、デフォルトのテーブル定義では列のヘッダーに変数のラベルを使用します。ラベルが存在しない場合、デフォルトのテーブル定義では列のヘッダーに変数の名前を使用します。
制限事項 ODSオプションは、_FILE_=オプション、FILEVAR=オプション、HEADER=オプション、PADオプションと併用できません。
要件 ODSオプションは、FILEステートメントでファイル参照名にPRINTを指定した場合にのみ有効です。
操作 DELIMITER=オプションおよびDSDオプションは、ODSオプションには適用されません。FOOTNOTES|NOFOOTNOTES、LINESIZE、PAGESIZE、TITLES | NOTITLESの各オプションは、リスト出力にのみ適用されます。

OLD

ファイルの古い内容を置き換えます。

デフォルト OLD
制限事項 動作環境によっては、OLDオプションを使用できない場合があります。詳細については、各動作環境向けのSASドキュメントを参照してください。
参照項目 MOD

PAD | NOPAD

LRECL=オプションに指定した長さに達するまで、外部ファイルに書き込むレコードにブランクを追加するかどうかを指定します。

デフォルト 可変長ファイルに書き込む場合は、NOPADがデフォルト値になります。固定長ファイルに書き込む場合は、PADがデフォルト値になります。
ヒント PADオプションを指定すると、可変長ファイルの中に固定長レコードを簡単に作成できます。
参照項目 LRECL=

PAGESIZE=value

レポートの1ページあたりの行数を設定します。

別名 PS=
デフォルト PAGESIZE=システムオプションの値
範囲 15から32767までの値を指定できます。
操作 TITLEステートメントが現在定義されている場合、1ページあたりの行数には、タイトルの行数が含まれます。
ヒント PAGESIZE=オプションに指定した値に達すると、出力ポインタは新しいページの1行目に移動します。
FILE LOGを指定する場合、最初のページに出力される行数は、SAS起動時の注意事項で使用する行数だけ少なくなります。たとえば、PAGESIZE=20と指定し、SAS起動時の注意事項に9行使用する場合、最初のページの出力に使用できるのは11行だけになります。
参照項目 XisError: No pubcode in link data found for lesysoptsref

PRINT | NOPRINT

キャリッジコントロール文字を出力行で使用するかどうかを制御します。

制限事項 ファイルへ出力する場合、N=オプションの値は1またはPAGESIZEとする必要があります。
動作環境 ファイルに出力されるキャリッジコントロール文字は、動作環境によって異なる場合があります。詳細については、各動作環境向けのSASドキュメントを参照してください。
ヒント ファイル参照名にPRINTを使用する場合、PRINTオプションを指定する必要はありません。
対話型SASセッションでFILE PRINTを指定する場合、アウトプットウィンドウではフォームフィードコントロール文字をページ区切りと解釈します。また、フォームフィードの前に出力される空行は出力から削除されます。アウトプットウィンドウから結果をフラットファイルに出力すると、改ページ文字を含まないファイルが生成されます。フォームフィード文字をファイルに含める必要がある場合、FILEステートメントに物理ファイルの場所とPRINTオプションを指定する必要があります。

RECFM=record-format

出力ファイルのレコード形式を指定します。

範囲 指定する値は動作環境によって異なります。詳細については、使用している動作環境に対応するSASドキュメントを参照してください。
操作 SAS 9.4では、グローバルLRECLシステムオプションのデフォルト値は32767です。固定長レコード(RECFM=F)を使用する場合、LRECLのデフォルト値は256になります。

STOPOVER

PUTステートメントが現在の行の長さを超えてデータ項目を書き込もうとする場合、DATAステップの処理を直ちに中止します。その場合、SASは現在の行の長さを超えたデータ項目を破棄し、エラー発生前に作成された行を書き込んでから、エラーメッセージを発行します。

デフォルト FLOWOVER
参照項目 FLOWOVER およびDROPOVER

TITLES | NOTITLES

現在のタイトル行をファイルのページ上に出力するかどうかを制御します。NOTITLESの指定を省略するか、TITLESを指定する場合、定義されているタイトルがあれば出力されます。

別名 TITLE | NOTITLE
デフォルト TITLES

_FILE_=variable

このFILEステートメントの現在の出力バッファを参照する文字変数の名前を指定します。この変数は他の変数と同じように使用できます。また、値を割り当てることもできます。この変数の値は自動的に保持されます。初期値はブランクです。自動変数と同じように、_FILE_=に指定した変数はデータセットに書き込まれません。

制限事項 variableには、すでに定義済みの変数は指定できません。_FILE_=オプションには、このDATAステップで初めて使用する変数を指定してください。LENGTHステートメントやATTRIBステートメントを使用して、_FILE_=に指定した変数の長さを設定したり変更することはできません。ただし、ATTRIBステートメントやFORMATステートメントを使用して、この変数に出力形式を指定することができます。
操作 この文字変数の最大長は、指定したFILEステートメントの論理レコード長(LRECL)になります。ただし、プログラムの実行直前まで、SASがこのファイルを開いてLRECL=オプションの値を確認することはありません。そのため、コンパイル実行中は、この変数のサイズは32,767バイトになります。
ヒント この変数の内容に対する変更は、FILEステートメントの現在の出力バッファの内容に直ちに反映されます。このFILEステートメントに対する後続のPUTステートメントにより、変更されたバッファの内容が出力されます。N=オプションで複数の出力を指定した場合でも、_FILE_=に指定した変数は、指定したFILEステートメントの現在の出力バッファにのみアクセスできます。
他のステートメントで_FILE_=オプションを使用せずに出力バッファの内容にアクセスするには、自動変数_FILE_を使用します。
参照項目 _FILE_変数の更新

動作環境オプション

FILEステートメントでの動作環境固有のオプションの詳細については、各動作環境向けのSASドキュメントを参照してください。

詳細

概要

デフォルトでは、PUTステートメントの出力は、SASログに書き込まれます。FILEステートメントを使用すると、この出力をプロシジャの出力先と同じ外部ファイル、または別の外部ファイルに書き出すことができます。キャリッジコントロール文字をファイルに追加するかどうかも指定できます。PRINT | NOPRINT オプションを参照してください。
FILEステートメントは実行ステートメントなので、条件(IF-THEN)処理でFILEステートメントを使用できます。1つのDATAステップでは、複数のFILEステートメントを使用して複数の外部ファイルに書き込むことができます。
動作環境の情報: FILEステートメントでは、動作環境固有の情報が必要になります。このステートメントを使用する前に、各動作環境向けのSASドキュメントを参照してください。
FILEステートメントでは、DATAステップの結果の書き込みにODS(Output Delivery System)を使用できます。詳細については、XisError: No pubcode in link data found for odsugを参照してください。

外部ファイルの直接更新

FILEステートメントをINFILEステートメントやPUTステートメントと併用すると、レコード全体の更新やレコード内の選択したフィールドのみの更新など、外部ファイルをバッファ内で更新できます。次のガイドラインに従ってください。
  • INFILEステートメントは必ず最初に記述します。
  • INFILEステートメントとFILEステートメントで、同一のファイル参照名または物理ファイル名を指定します。
  • INFILEステートメントには、FILEステートメントとINFILEステートメントの両方で使用できるオプションを使用します。(これらのオプションをFILEステートメントに指定しても無視されます。)
  • INFILEステートメントにSHAREBUFFERSオプションを指定して、FILEステートメントとINFILEステートメントが同一のバッファを使用できるようにします。それによってCPU時間が節約されるとともに、レコード全体ではなく個々のフィールドを更新することが可能になります。

出力バッファのコンテンツへのアクセス

_FILE_=に指定する変数の他に、_FILE_自動変数を使用しても最後に実行したFILEステートメントの出力バッファの内容を参照できます。この文字変数の値は自動的に保持されます。初期値はブランクです。他の自動変数と同じように、_FILE_自動変数はデータセットに書き込まれません。
INFILEステートメントに_FILE_=オプションを指定すると、指定した変数の値は自動変数_FILE_でも間接的に参照されます。自動変数_FILE_を指定し、特定のFILEステートメントで_FILE_=オプションの指定を省略した場合、_FILE_=オプションの変数がそのFILEステートメントに対して内部的に作成されます。これ以外の場合に、特定のFILEステートメントに対して_FILE_=オプションの変数が作成されることはありません。
実行時または参照時、自動変数_FILE_の最大長は、そのときに使用している_FILE_=オプションの変数の最大長に一致します。ただし、自動変数_FILE_が参照している他の変数の長さは実行時まで確定されないので、自動変数_FILE_の長さはコンパイル時に32,767バイトに設定されます。たとえば、自動変数_FILE_の値を長さが定義されていない新しい変数に割り当てる場合、新しい変数のデフォルトの長さは32,767バイトになります。LENGTHステートメントやATTRIBステートメントを使用して、自動変数_FILE_の変数の長さを設定したり、無効にすることはできません。ただし、FORMATステートメントやATTRIBステートメントを使用すると、自動変数_FILE_に出力形式を割り当てることができます。

_FILE_変数の更新

他のSAS変数と同じように、自動変数_FILE_を更新することができます。次の2つの方法を使用できます。
  • 割り当てステートメントで自動変数_FILE_を使用する
  • PUTステートメントを使用する
次の形式で割り当てステートメントを使用すると、_FILE_変数を更新できます。
_FILE_ = <'string-in-quotation-marks' | character-expression>
この割り当てステートメントでは、現在の出力バッファの内容を更新し、バッファの長さを'string-in-quotation-marks'またはcharacter-expressionの長さに設定します。ただし、割り当てステートメントを使用しても、PUTステートメントの現在の出力ポインタの位置は変化しません。このFILEステートメントの次のPUTステートメントに対しては列1から、PUTステートメントに後置@を使用する場合は既知の最終位置からバッファの更新を開始します。
次の例では、割り当てステートメントで現在の出力バッファの内容を更新します。PUTステートメントのカラムポインタの位置は変わりません。
   file print;
   _file_ = '_FILE_';
   put 'This is PUT';
次の出力が作成されます。This is PUT
この例では、
   file print;
   _file_ = 'This is from FILE, sir.';
   put @14 'both'; 
次の出力が作成されます。This is from both, sir.
PUTステートメントを使用しても、自動変数_FILE_を更新することができます。PUTステートメントでは出力バッファのデータに出力形式を設定し、自動変数_FILE_がそのバッファを参照するため、自動変数_FILE_はPUTステートメントで更新されます。ただし、デフォルトでは、この出力バッファは、PUTステートメントを実行し、現在のレコード(または、N=オプションに指定したレコードブロック)を出力した後に消去されます。そのため、出力前に自動変数_FILE_の内容の確認や変更を行うには、PUTステートメントに後置@または後置@@を指定します(N=1の場合)。値がN=1以外の場合、行ポインタコントロールの最終位置をレコードブロックの最後のレコードに指定するPUTステートメントで、後置@または後置@@を使用します。次の例は、N=1の場合です。
   file ABC;
   put 'Something' @;
   Y = _file_||' is here';
   file ABC; 
   put 'Nothing' ; 
   Y = _file_||' is here';
   
Yには最初にSomething is hereが割り当てられ、次にis hereが割り当てられます。
自動変数_FILE_に変更を加えると、現在のFILEステートメントの出力バッファに直ちに変更が反映されます。FILEステートメントに続けてPUTステートメントを実行すると、変更したバッファの内容が出力されます。
N=オプションに複数のバッファを指定した場合でも、自動変数_FILE_は、そのFILEステートメントで現在使用中の出力バッファにのみアクセスします。N=オプションに指定したすべてのバッファにアクセスできますが、特定のバッファを現在の出力バッファに設定するには、PUTステートメントに#行ポインタコントロールを指定する必要があります。

比較

  • FILEステートメントは、PUTステートメントの出力ファイルを指定します。INFILEステートメントは、INPUTステートメントの入力ファイルを指定します。
  • FILEステートメントおよびINFILEステートメントでは、使用する外部ファイルに関する追加情報をSASシステムに提供するオプションを使用できます。
  • プログラムエディタ、ログ、アウトプットウィンドウ、FILEコマンドでは、外部ファイルを指定し、ウィンドウの内容をファイルに書き込むことができます。

例1: 新規ページの開始時にステートメントを実行する

次のDATAステップは、HEADER=オプションの使用法を示しています。
  • レポートを出力します。DATA _NULL_を使用して、データセットの作成ではなく、レポートの出力を行うように指示します。
    data _null_;
       set sprint;
       by dept;
  • SASアウトプットウィンドウに出力を送信します。ヘッダー情報を参照します。ファイル参照名にPRINTを指定し、プロシジャの出力先と同じ場所に出力を送信します。HEADER=オプションは、各ページのヘッダーを作成するステートメントの前に配置されているラベルを参照します。
       file print header=newpage;
  • 部門ごとに新しいページを開始します。
       if first.dept then put _page_;
          put @22 salesrep @34 salesamt;
  • 各ページにヘッダーを出力します。新しいページを開始するたびに、次のステートメントが実行されます。ラベルが指定されたグループの最後のステートメントとして、ラベルの前にRETURNステートメントを指定する必要があります。
       return;
          newpage:
             put @20 'Sales for 1989' /
                 @20 dept=;
             return;
       run;

例2: 現在のページに残っている行数に基づき新規ページを決定する

次のDATAステップでは、LINESLEFT=オプションを使用し、現在のページに残っている行数に基づいて改ページを実行する位置を決定する例を示します。
  • レポートを出力します。DATA _NULL_を使用して、データセットの作成ではなく、レポートの出力を行うように指示します。
    data _null_;
       set info;
  • 標準のSASアウトプットウィンドウに出力を送信します。ファイル参照名にPRINTを指定し、プロシジャの出力先と同じ場所に出力を送信します。LINESLEFTオプションは、変数REMAINに現在のページに残っている行数が格納されていることを示しています。
       file print linesleft=remain pagesize=20;
          put @5 name @30 phone 
              @35 bldg @37 room;
  • 現在のページの残りの行数が指定した値よりも少なくなると、新しいページが開始されます。この条件に従って、PUT _PAGE_は新しいページを開始し、ポインタを1行目に配置します。
       if remain<7 then put _page_ ;
       run;

例3: ページ全体のコンテンツを配置する

この例ではDATAステップでN=PAGESIZEオプションを使用し、2列配置された電話番号リストを生成する方法を示しています。1つの列には名前を格納し、もう1つの列には電話番号を格納します。
  • レポートを作成し、SASアウトプットウィンドウに書き込みます。DATA _NULL_を使用して、データセットの作成ではなく、レポートの出力を行うように指示します。ファイル参照名はPRINTです。キャリッジコントロール文字を使用して、出力するファイルの特性にあった出力を行います。N=PAGESIZEと指定すると、出力ポインタをページ全体に移動できます。
    data _null_;
       file 'external-file' print n=pagesize;
  • レポートに使用する列を指定します。DATAステップの繰り返しごとに、DOループを2回繰り返します。COLの値は最初の繰り返しで1に設定され、2回目の繰り返しで40に設定されます。
       do col=1, 40;
  • データを20行書き込みます。次のDOループを20回繰り返して列1に20行データを書き込みます。書き込みが完了すると、外側のループでCOLが40に設定されます。このDOループを20回繰り返し、列2にデータを20行書き込みます。LINEおよびCOLの値はDOステートメントによって設定され、増分が追加されます。このLINEとCOLの値によって、PUTステートメントでページ上にNAMEとPHONEの値を書き込む位置が制御されます。
       do line=1 to 20;
          set info;
          put #line @col name $20. +1 phone 4.;
       end;
  • 2列分のデータがすべて揃ったら、ページ全体を出力します。次のENDステートメントで外側のループを終了します。PUT _PAGE_は現在のページを出力し、ポインタを次のページの最上部に移動させます。
       end;
          put _page_;
       run;

例4: 現在の出力ファイルの識別

次のDATAステップでは、ファイル識別メッセージをログに出力し、現在の出力ファイルの値を変数MYOUTに割り当てます。次のPUTステートメントは、MYOUTに適切な値を割り当ててから、この変数の値を出力ファイルに書き込む例を示しています。
data _null_;
   length myout $ 200;
   file file-specification filename=myout;
   put myout=;
   stop;
run;
次のPUTステートメントは、現在の出力ファイルに、ファイルの物理名が記述された行を書き込みます。
MYOUT=your-output-file

例5: 現在の出力ファイルを動的に変更する

次のDATAステップでは、FILEVAR=オプションを使用して、現在開かれている出力ファイルを新しい物理ファイルに動的に変更します。
  • レポートを出力します。その次に、長い文字変数を作成します。DATA _NULL_を使用して、データセットの作成ではなく、レポートの出力を行うように指示します。LENGTHステートメントを使用して、外部ファイル名を格納するのに十分な長さを割り当てた変数を作成します。
    data _null_;
       length name $ 200;
  • インストリームデータ行を読み込み、NAME変数に値を割り当てます。
       input name $;
  • NAME変数の値が変わったら、現在の出力ファイルを閉じ、新しいファイルを開きます。file-specificationは、プレースホルダです。これには、有効なSAS名を指定できます。
       file file-specification filevar=name mod;
          date = date();
  • 現在開かれている出力ファイルにログレコードを追加します。
       put 'records updated ' date date.;
  • 外部ファイルの名前を指定します。
    datalines;
    external-file-1
    external-file-2
    external-file-3
    ;

例6: 出力行が出力ファイルの行の長さを超える場合

変数の行の長さを合計すると出力行(80文字)よりも長くなるので、次のPUTステートメントでは、自動的に3つのレコードに分割して書き込みます。
file file-specification linesize=80;
   put name $ 1-50 city $ 71-90 state $ 91-104;
変数NAMEの値は1番目のレコードに出力されます。変数CITYの値の出力は2番目のレコードの列1から、変数STATEの値の出力は3番目のレコードの列1から始まります。

例7: TCP/IPソケットを使用したデータ読み込みとテキスト書き込み

この例では、TCP/IPソケットを使用してファイルから生データを読み込んでいます。INFILEステートメントでは、NBYTE=オプションを使用しています。
/* Start this first as the server */
filename serve socket ':5205' server 
   recfm=s 
   lrecl=25 blocksize=2500;
data _null_;
   nb=25;
   infile serve nbyte=nb;
   input text $char25.;
   put _all_;
run;
この例では、TCP/IP ソケットを使用してファイルにテキストを出力します。
/* While the server test is running,*/ 
/*continue with this as the client. */
filename client socket "&hstname:5205" 
   recfm=s
   lrecl=25 blocksize=2500;
data _null_;
   file client;
   put 'Some text to length 25...';
run;

例8: 出力ファイル書き込み時のエンコードの指定

この例では、SASデータセットから外部ファイルを作成します。現在のセッションエンコーディングはWlatin1ですが、外部ファイルのエンコーディングはUTF-8にする必要があります。デフォルトでは、外部ファイルは現在のセッションエンコーディングを使用して書き込まれます。
外部ファイルへの書き込み時に使用するエンコーディングを指定するには、ENCODING=オプションを指定します。外部ファイルをUTF-8エンコーディングにするように指示すると、外部ファイルへの書き込み時に、Wlatin1から指定したUTF-8エンコーディングにデータがトランスコードされます。
libname myfiles 'SAS-library';
filename outfile 'external-file';
data _null_;
   set myfiles.cars;
   file outfile encoding="utf-8";
   put Make Model Year;
run;

例9: FTPアクセス方式を使用してExcelスプレッドシートにデータを出力する

この例では、FTPアクセス方式とFILEVARオプションを使用して、複数のMicrosoft Excelワークシートにデータを書き込みます。
data _null_;
   do i = 1 to 3;
      sheet = cats('excel|[test-sheet.xlsx]Sheet', i, '!r1c1:r10c2');
      file area ftp filevar=sheet;
      do x = 1 to 10;
         y = 2*x;
         put x y;
         end;
      end;
run;

関連項目:

XisError: No pubcode in link data found for lrcon
ステートメント:
SAS Intelligence Platform:Application Server Administration GuideのLOCKDOWNステートメント
XisError: No pubcode in link data found for odsug
XisError: No pubcode in link data found for appmsgdg
XisError: No pubcode in link data found for appmsgdg
システムオプション:
SAS Intelligence Platform:Application Server Administration GuideのLOCKDOWNシステムオプション
前のページ|次のページ|ページの先頭へ