文字項目の長さが決定するタイミング - SAS

lengthステートメントを使用しない場合、文字の長さが決定するタイミングは、dataステップの中で該当変数が初めて登場してくるところです。

data TEST ;
  A = "12345" ;       output ;
  A = "01234567890" ; output ;
run ;

proc contents data=TEST ;
run ;

上記のプログラムでは、変数 A に最初の式で5バイトの文字列を格納し、次の式で10バイトの文字列を格納しようとしています。文字の長さは、最初の式で決定するので、変数 A の長さは5バイトです。なので、次の式で10バイトの文字列をすべて格納することはできません。



初めて登場するタイミングで決定すると言いましたが、この「初めて」というのは実行されない式にも当てはまります。

data TEST ;
  A = 1 ;
  if A = 0 then B = "1" ;
  B = "12345" ;
run ;

proc contents data=TEST ;
run ;

if 文の中の B = "1" ; は実行されませんが、dataステップの中で「初めて」変数 B が登場するタイミングです。しっくりこないかもしれませんが、ここが変数 B の長さが決定するタイミングで、長さは1バイトとなります。変数の長さは1バイトなので、最後の5バイトの文字列をすべて格納することはできません。



場合によってはバグの元にもなるかもしれないので、事前にlengthステートメントで、文字の長さを決めておくのが良いかと思います。

バグ発生経験者より自戒を込めて



参考サイト

  1. SAS Base Programmer 練習問題23 | study SAS

コメント

このブログの人気の投稿

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

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

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