目次
1. SASから外部データへの出力
ここでは、SASで処理した結果を、SASデータセットとしてではなく、カンマ区切り(CSV)やタブ区切り(TSV)などの外部データとして出力する方法について紹介していく。 目次 1.サンプルデータ2.展開例・カンマ区切りで出力・タブ区切りで出力・ヘッダーをラベルで出力・ヘッダー無しで出力・UTF-8で出力・UTF-8、BOMなしで出力3.PROC EXPORTで出力しな ... 続きを見る
【SAS】テキストファイル(カンマ区切りCSV、タブ区切りTSV)の出力
2. FILE・PUTステートメント
外部ファイルへの出力処理の、基本的な構造は外部ファイルの読み込みと同様である。FILENAMEステートメントで出力先に参照名を割り当て、DATAステップで実際の出力をおこなう。そして、DATAステップ内でINFILEに対応するのがFILE、INPUTに対応するのがPUTの各ステートメントである。
①FILEステートメント
PUTステートメントの出力先を指定する。FILEステートメントを省略した場合、PUTステートメントの出力先はログとなる。
②PUTステートメント
変数値に想定外の値が含まれているときや、予期しない処理を検出したいときに、ログにERRORやWARNINGを表示させたい場合がある。そういった場合に、PUTステートを使用することが多く、FILEステートメントと併用することで、外部ファイルに出力することもできる。
外部ファイルにデータを書き込むDATAステップの基本構造
FILENAME 参照名 "外部ファイルを出力するフォルダのフルパス名"; DATA _null_; SET 出力データセット名; FILE 参照名(外部ファイル名) オプション; その他のSASステートメント; その他のSASステートメント; ・・・; PUT 変数の書き込み定義 変数の書き込み定義 ・・・ ; RUN; FILENAME 参照名 CLEAR;
3. キャラクター形式データのフォーマット出力
キャラクター形式の様な固定長データを出力する時は、読み込み時のインフォーマットを使った処理とほぼ同様の記述をすればよい。具体的にはPUTステートメントでフォーマットを使用する。この出力形式をSASはフォーマット出力と呼ぶ。
SASが提供するカスタマイズされた出力指示のことをフォーマットと呼ぶ。インフォーマットの逆の機能を果たすもので、SAS変数の値を書き出すためのものである。プログラム内での記述方法は基本的にインフォーマットと同じである。数値変数を書き出すための数値フォーマット、文字変数を書き出すための文字フォーマットという分類もインフォーマットと同様である。ここでは、最も標準的な以下のフォーマットだけ押さえておこう。
①w.dフォーマット
・数値データを数値テキストとして書き出すときに指定する。
・w(出力のフィールド幅・カラム数)は、最大32まで指定可能である。
・dは小数点以下の桁数を指定し、小数点以下を出力したい場合は必ず指定する。
【例】
「num=10.25」という数値があった場合、「10.25」の長さはピリオド「.」も含めて5バイト、小数点以下2桁なので、「put num 5.2」と指定する。その出力結果は「10.25」となる。
「num=10.25」に対して「put num 7.4」と指定した場合、「10.2500」と出力される。
「num=10.25」に対して「put num 4.1」と指定した場合、「10.3」と四捨五入されて出力される。
②$w.または$CHARw.フォーマット
・文字データを書き出すときに指定する。
・wは1~32767の範囲で指定することができる。
・文字データの前置ブランクを除去せずにそのまま出力したいときは、$CHARw.を使用する。
【事前準備】 下図のようなデータセットを用意する。 data list_fixed; infile datalines; input @1 first_name $10. /*$w.インフォーマット*/ @1 first_name2 $char10./*$CHARw.インフォーマット*/ @11 last_name $10. /*$w.インフォーマット*/ @11 last_name2 $char10./*$CHARw.インフォーマット*/ @21 sex 1. /*w.dインフォーマット*/ @22 age 2. /*w.dインフォーマット*/ ; datalines; Kaori Ito222 Hideki Tanaka135 Taro Yamada130 Hiroki Sato125 Mizue Ishii254 Yuko Koyama230 Ichiro Suzuki1 Shinji Suda127 Reiko Yamauchi242 Mituru Adachi345 ; run;
【フォーマット出力の例】 上記の事前準備で作成したSASデータセット「list_fixed」をフォーマット出力する。 filename out "C:\Users"; options missing=""; data _null_; set list_fixed; file out(list_fixed.txt) lrecl=1000 stopover; put @1 first_name2 $char10. @11 last_name2 $char10. @21 sex 1. @22 age 2. ; run; options missing="."; filename out clear;
・MISSINGオプション
ここでは、欠損値の出力をピリオド「.」からスペースに変更している。欠損値をピリオド「.」のまま出力する機会はあまりない。
・stopover
PUTの出力定義で指定されたカラムが、論理レコード長(lrecl)を超えたときにエラーが出るようにするオプション。
【実行結果】
フォルダ「"C:\Users"」直下に「list_fixed.txt」が出力されている。
4. カンマ区切り(CSV)・タブ区切り(TSV)形式データのリスト出力
①DATAステップによる出力
【例】 data _null_; set list_fixed; file out(list_csv.csv) dlm="," dsd lrecl=1000 stopover; /*1行目に変数名を出力する*/ if _n_ = 1 then do; put "first_name" "," "last_name" "," "sex" "," "age" ; end; /*2行目以降にデータ部分を出力する*/ put first_name last_name sex age ; run; filename out clear;
【実行結果】
②EXPORTプロシジャを使った出力
【事前準備】 まず、以下のように、サンプルSASデータセットlist_labelを用意する。 data list_label; infile datalines dlm="," dsd missover; attrib first_name length=$20. label="First Name" last_name length=$20. label="Last Name" sex length=8. label="Sex" age length=8. label="Age" ; input first_name last_name sex age ; datalines; Kaori,Ito,2,22 Hideki,Tanaka,1,35 Taro,Yamada,1,30 Hiroki,Sato,1,25 Mizue,Ishii,2,54 Yuko,Koyama,2,30 Ichiro,Suzuki,1,. Shinji,Suda,1,27 Reiko,Yamauchi,2,42 Mituru,Adachi,3,45 ; run;
【CSVファイルを出力する例】 proc export data=list_label outfile="C:\Users\list_export.csv" dbms=csv replace; run;
【実行結果】
【タブ区切りで、変数名ではなくラベルを出力する例】 proc export data=list_label outfile="C:\Users\list_export.tsv" dbms=dlm label replace; delimiter="09"x; run;
【実行結果】
-
-
【SAS】テキストファイル(カンマ区切りCSV、タブ区切りTSV)の出力
目次 1.サンプルデータ2.展開例・カンマ区切りで出力・タブ区切りで出力・ヘッダーをラベルで出力・ヘッダー無しで出力・UTF-8で出力・UTF-8、BOMなしで出力3.PROC EXPORTで出力しな ...
続きを見る