The Nameless City

何故か製薬やSAS関連のブログ、の予定。

Excelから出てきたようなCSVを、途中の改行を別フレーズに置き換えるサンプル。

こんなの。

filename _IN  ... ;
filename _OUT ... ;

data _NULL_ ;
  length TEXT $32767. ;
  infile _IN lrecl=32767 dlm='1a'x;
  input TEXT ;
  file _OUT lrecl=32767 dlm='1a'x;
  length NUM_DQ FLG_DQ 8. ;
  retain FLG_DQ ;
  if _N_ = 1 then FLG_DQ = 0 ;
  NUM_DQ=klength(TEXT)-klength(transtrn(TEXT,"""",trimn(""))) ;
  FLG_DQ = mod(NUM_DQ+FLG_DQ,2) ;
  if FLG_DQ=0 then put TEXT ;
  else do ;
    put TEXT +(-1) "<LF>" @@ ;
  end ;
run ;

補足

文字コード'1a'xは、まずレコードの区切り文字としては使われない文字コードを変数区切り文字に設定したということ。
置換文字 - Wikipediaとか参照。
結構End Of Fileのマークとして使われることがあります。
SASは改行の文字コードをあんまり配慮してくれないので、別レコードになることがあるけど、二重引用符の数を認識して取り込むという感じです。