ユーザ定義フォーマットのUTF-8セッションエンコーディング環境への移行
[OS]
[リリース] 9.2, 9.3, 9.4
[キーワード] SAS PROC FORMAT CNTLIN CNTLOUT
[質問]
今までは、SASをセッションエンコーディングSJISで使用していました。
[回答]フォーマットカタログにつきましては、エンコーディングの概念がございません。 1) SAS SJISセッションエンコーディングで、制御データセットの作成 LIBNAME sjisfmt "c:¥temp¥sjisfmt"; /** サンプルフォーマットの作成 **/ PROC FORMAT LIB=work; VALUE testfmt 1="男"; RUN; /** CNTLOUT=にて、制御データセット化 **/ PROC FORMAT LIB=work CNTLOUT=sjisfmt.cntlout; RUN; 2) SAS UTF-8セッションエンコーディングにて、制御データセットのカスタマイズ、再作成 LIBNAME sjisfmt "c:¥temp¥sjisfmt" CVPMULT=1.5 INENCODING=sjis; /** 1)で作成した制御データセットをWORK.FORMATSに取り込む **/ PROC FORMAT CNTLIN=sjisfmt.cntlout LIB=work; RUN; /** 再度、制御データセットとして、出力 **/ PROC FORMAT CNTLOUT=work.cntlout LIB=work; RUN; /** ここで、SJIS->UTF-8に変更する上で、日本語の長さの変更がある **/ /** (今回の例では、"男"が2->3バイトになる **/ /** フォーマットの中では、フォーマット値の長さ、フォーマット値を **/ /** 指定しない場合のデフォルトの長さの情報も含まれている **/ /** 制御データセット内では、変数 LENGTH、DEFAULTがそれぞれ該当 **/ /** する。DEFAULTはSJISで作成した際の長さとなっているため、LENGTH **/ /** と同じ値にする **/ DATA work.cntlout2; SET work.cntlout; DEFAULT=length; RUN; /** カスタマイズした制御データセットをフォーマットカタログに取り込む **/ PROC FORMAT CNTLIN=work.cntlout2 LIB=work; RUN; /** 結果の確認 **/ DATA _null_; a=1; PUT a testfmt.; RUN;
|