文字値の検証

[OS] ALL
[リリース] 6.12, 8.2
[キーワード] DATA, FUNCTION, VERIFY

[質問]

文字変数から数値変数に変換する際にINPUT関数を利用していますが、数字以外の文字がある場合、次のようなNOTEが発生してしまいます。

  NOTE: 無効な関数INPUT の引数が行100 カラム11 にあります。
NOTEを発生させないよう、変数の中身を確認後、INPUT関数で処理するようなことはできないでしょうか?

[回答]

文字変数内の文字を検証するには、VERIFY関数が便利です。
VERIFY関数は、指定した文字以外の文字が出現する位置を戻し、指定する文字のみが存在する場合は「0」を戻します。ただ、SASにおける文字変数は、変数長と変数値の差を埋めるため、末尾に空白文字が入ります。そのため、VERIFY関数の利用では工夫が必要となります。

プログラム例

DATA source ;
  str = "123" ; OUTPUT;
  str = "AAA" ; OUTPUT;
  str = " " ; OUTPUT;
RUN;

DATA dest ;
  SET source ;
       /* 数字のみである場合、変数v は0 となります*/
  v = VERIFY(TRIM(str) , '0123456789');
  IF (v = 0) THEN
    num = INPUT(str, 8.);
  DROP v;
RUN;