動かして覚える file ステートメント dropover , stopover オプション
data ステップの file ステートメントには、出力ファイル1行あたりの最大バイト数を指定する lrecl= オプションがついています。デフォルトでは、この lrecl= オプションを超えた値を出力しようとすると、次の行に超えた分の値が書き込まれます。
data TEST ; length A $10. ; A = "1" ; output ; A = "1234567890" ; output ; A = "ABCDEFG" ; output ; run ; filename OUT "/folders/myfolders/test.txt" ; data _null_ ; set TEST ; file OUT lrecl=9 ; put A ; run ;
dropover オプション
lrecl= の値を超えたとき、該当の行を削除したい場合は、fileステートメントに dropover オプションを付けます。
68 data _null_ ;
69 set TEST ;
70 file OUT lrecl=9 dropover ;
71 put A ;
72 run ;
NOTE: 出力ファイルOUT :
ファイル名=/folders/myfolders/test.txt,
所有者名=root,グループ名=vboxsf,
アクセス権限=-rwxrwx---,
更新日時=2015年07月22日 21時01分14秒
NOTE: 3レコードを出力ファイルOUTに書き込みました。
最小レコード長は0です。
最大レコード長は7です。
NOTE: DROPOVERオプションを指定しているため、出力の一部を無視しました。
NOTE: データセットWORK.TESTから3オブザベーションを読み込みました。
NOTE: DATAステートメント処理(合計処理時間):
処理時間 0.03 秒
CPU時間 0.02 秒
該当の行は、スキップされるわけではなく、空行となって出力されます。
stopover オプション
lrecl= の値を超えたとき、処理を中止したい場合は、fileステートメントに stopover オプションを付けます。
68 data _null_ ;
69 set TEST ;
70 file OUT lrecl=9 stopover ;
71 put A ;
72 run ;
NOTE: 出力ファイルOUT :
ファイル名=/folders/myfolders/test.txt,
所有者名=root,グループ名=vboxsf,
アクセス権限=-rwxrwx---,
更新日時=2015年07月22日 21時10分25秒
ERROR: PUTステートメントがレコード長を超えました。
FILE /folders/myfolders/test.txtオプションSTOPOVERを指定しました。
A=1234567890 _ERROR_=1 _N_=2
NOTE: 1レコードを出力ファイルOUTに書き込みました。
最小レコード長は1です。
最大レコード長は1です。
NOTE: エラーが発生したため、このステップの処理を中止しました。
NOTE: データセットWORK.TESTから2オブザベーションを読み込みました。
NOTE: DATAステートメント処理(合計処理時間):
処理時間 0.01 秒
CPU時間 0.02 秒
処理の中止なので、中止の直前までは内容がファイルに出力されます。
コメント
コメントを投稿