SAS UNICODE版での注意
よくUnicodeデータセットを読むときには、libnameステートメントでcvpオプションを指定して文字列サイズを拡張する必要がある、なんて言いますけど、別のエラーにぶち当たりました。
以下のコードはSAS日本語版で実行できるものです
data _null_; a='28apr2021'd; put a yymmdd10.; put a jdateymd14.; put a jnengo16.; run;
2021/4/28を3種類のフォーマットで出力しています。
結果は以下のとおりです。
これを、SAS Unicode版で実行するとどうなるでしょうか。
エラーになりました。
幅が無効って言われちゃってます。
コメントアウトして実行してみると…
今度はjnengoフォーマットで「日」が出力されていません
これはちゃんと理由があって、日本語、つまりいわゆるダブルバイト文字は1文字2バイトというのが今までの常識でした。
しかしUNICODEでは、1文字3バイト(一部4バイト)のため、フォーマットの長さも変更する必要があります。
具体的には以下のように
jdateymdは年月日の3文字が含まれているため、3バイトを増やした17.に、
jnengoは年号、年月日の5文字が含まれているため、5バイト増やした21.にします。
data _null_; a='28apr2021'd; put a yymmdd10.; put a jdateymd17.; put a jnengo21.; run;
これで正しく出力されました。
移行した後にjdateymdのようにエラーで止まってくれればいいんですが、jnengoのように、尻切れのようになってしまうと怖いですね。