動かして覚える 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 ;

~ チルダ修飾子を付けられた項目は、区切り文字のあるなしに関わらず、ダブルクォーテーションで囲まれます。

欠損値の出力結果は、数値は . に、文字は半角スペースになります。



参考サイト

  1. ~ チルダ記号の使い道 | データステップ100万回 SAS新手一生
  2. SASデータセットをCSVファイルに出力する | SAS社 FAQ

コメント

このブログの人気の投稿

日付フォーマットでない文字項目をSAS日付に変換するときにログ出力されるメッセージを抑制したい - SAS

Linuxコマンド: date で◯か月前 / ◯か月後を取得するときの注意

データセット(.sas7bdatファイル)の文字コードを取得したい - SAS