動かして覚える file ステートメント dsd オプション / ~ チルダ修飾子 ~値にダブルクォーテーションを付ける~ - SAS
SASデータセットの内容を CSVファイルに書き出して、エクセルに読み込ませたい、というとき、値の中にカンマがあるとエクセルにうまく読み込んでくれません。どんな感じで読み込まれてしまうのか。試しに、DATAステップの file ステートメントと put ステートメントで、CSV ファイルを作ってみましょう。
ファイルの出力 - カンマ区切り
data TEST ; length B $10. C $10. ; A = 1 ; B = "ABCDEFG" ; C = "123456" ; output ; A = 2 ; B = "09"x || "BBB" ; C = "1,2,3" ; output ; A = 3 ; B = "B," || "09"x || ",B" ; C = "" ; output ; A = . ; B = "" ; C = "" ; output ; run ; filename OUT "/folders/myfolders/test.txt" ; data _NULL_ ; set TEST ; file OUT dlm="," ; put A B C ; run ;
※ "09"x = タブ
作成した CSV ファイルをエクセルにカンマ区切りで読み込ませてみると、値がずれて読み込まれてしまいます。
ファイルの出力 - カンマ区切り dsd オプション付き
カンマを値として読み込ませるには、ダブルクォーテーション " で囲む必要があります。ダブルクォーテーションを付けるために、file ステートメントに dsd オプションを付けます。dsd オプションは値にカンマがある場合、ダブルクォーテーションを付けてくれます。
data _NULL_ ; set TEST ; file OUT dlm="," dsd ; put A B C ; run ;
こんな感じで、カンマを値として持っている箇所が、ダブルクォーテーションで囲まれています。これで、エクセルにいい感じに読み込ませることができます!
ただし、数値の欠損値が . ではなく、空白になっていますので、ご注意ください。
ファイルの出力 - タブ区切り dsd オプション付き
data _NULL_ ; set TEST ; file OUT dlm="09"x dsd ; put A B C ; run ;
タブ区切りにしても、いい感じにダブルクォーテーションが付いてくれます。
dsd オプションと ~ チルダ修飾子を使ってみる
すべての項目に対してダブルクォーテーションを付けたい場合は、putステートメントの各項目の後に、~ チルダ修飾子を付けます。
data _NULL_ ; set TEST ; file OUT dlm="09"x dsd ; put A ~ B ~ C ~ ; run ;
~ チルダ修飾子を付けられた項目は、区切り文字のあるなしに関わらず、ダブルクォーテーションで囲まれます。
欠損値の出力結果は、数値は . に、文字は半角スペースになります。
コメント
コメントを投稿