移送形式ファイルでの移送で数値変数の長さが異なる場合がある

[OS] ALL
[リリース] SAS 9.1以降
[キーワード] Base, transport file, XPORT, length, CIMPORT, EXTENDSN

[質問]

移送形式ファイルを使用してUNIXからWindowsにデータセットを移送する場合、8バイト未満の数値変数が定義されていると自動的に1バイト追加されてしまいます。
この現象を回避する方法はありますか?

[回答]

SASでは、移送形式ファイルにおいて8バイト未満の数値変数が定義されている場合、特に移送元と移送先のOSが異なる場合などに発生する数値精度の違いにより数値精度が失われることを防ぐために、数値変数の長さを1バイト増やします。これは、同一OS間での移送においても同様の現象となります。

ただし、XPORT形式ではなく、CPORTプロシジャによるCPORT形式で移送ファイルを作成した場合には、CIMPORTプロシジャのオプションであるEXTENDSN=オプションを指定すれば、数値変数の長さが1バイト追加されることを回避できます。


PROC CIMPORT LIB=mylib FILE="C:¥mydir¥sample.cpt" EXTENDSN=NO;
RUN;