動かして覚える 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 秒
処理の中止なので、中止の直前までは内容がファイルに出力されます。
コメント
コメントを投稿