2017年2月27日月曜日

DS2やFedSQLで文字から数値に型変換する方法


DS2やFedSQLで文字→数値に型変換する方法を紹介します。
(型変換に関する注意事項について情報提供いただきました、有難うございます!)


FedSQLの場合


FedSQLには型変換するCAST関数が用意されています。
* サンプルデータ ;
data a;
  x="12";
run;

* 文字を数値に変換する例 ;
proc fedsql;
  select cast(x as double)
  from a ;
quit;


但し注意事項あり!(SAS9.4での挙動)
以下のように変換対象の文字変数のlengthが200とか長めに設定されているとCAST関数を通した時にERRORになってしまいます。詳しい原因はよく分かりません。

* サンプルデータ ;
data a;
  length x $200.;
  x="12";
run;

* 文字を数値に変換する例 ;
proc fedsql;
  select cast(x as double)
  from a ;
quit;

ログ
ERROR: Invalid character value for cast specification


解決策として、STRIP関数をかませて余計な両脇のスペースを取ってからCAST関数を使えばERRORが出なくなります。
proc fedsql;
  select cast(strip(x) as double)
  from a ;
quit;


別の方法として、INPUTN関数でも型変換できます。
proc fedsql;
  select inputn(x,'best8')
  from a;
quit;

INPUTN( 対象変数 , 'フォーマット')
という構文で、変換するフォーマットをシングルクォーテーションで囲って指定します。



DS2の場合


文字→数値に変換したい場合、INPUTN関数が使えます。
proc ds2;
 data b (overwrite=yes);
   dcl double y;
   method run();
      set a;
      y = inputn(x,'best8');
   end;
 run;
quit;


0 件のコメント:

コメントを投稿