前のページ|次のページ

ENCODING=データセットオプション

SASデータセットの読み取りまたは書き込みに使用するエンコーディングを手動で指定します。

該当要素: DATAステップおよびPROCステップ
カテゴリ: データセットコントロール

構文

ENCODING= ANY | ASCIIANY | EBCDICANY | encoding-value

説明

ANY

トランスコーディングを行わないように指定します。

ANYはBINARYの指定と同等です。データはバイナリであるため、実際のエンコーディングには意味がありません。

ASCIIANY

混在したエンコーディングがASCIIエンコーディングの場合にトランスコーディングを行わないように指定します。

EBCDICANY

混在したエンコーディングがEBCDICエンコーディングの場合にトランスコーディングを行わないように指定します。

encoding-value

エンコーディング値を指定します。

参照項目 各国語サポート関連のエンコーディング

詳細

ENCODING=の値は、SASデータセットに現在のセッションエンコーディングとは異なるエンコーディングがあることを示します。データは、データセットから読み取られるときに、指定したエンコーディングからセッションエンコーディングにトランスコードされます。また、データセットに書き込まれるときに、セッションエンコーディングから指定したエンコーディングにトランスコードされます。
入力処理
デフォルトでは、入力処理のエンコーディングは次のように決まります。
  • セッションエンコーディングとファイルに指定されたエンコーディングが異なる場合、データはセッションエンコーディングにトランスコードされます。
  • ファイルにエンコーディングが指定されておらず、ファイルのデータ表記が現在のセッションのエンコーディングとは異なる場合、データは現在のセッションのエンコーディングにトランスコードされます。
出力処理
デフォルトでは、出力処理のエンコーディングは次のように決まります。
  • データは現在のセッションのエンコーディングを使用してファイルに書き込まれます。ただし、OUTREP=データセットオプション、LIBNAMEステートメントのOUTENCODING=オプション、またはENCODING=データセットオプションを使用して別の出力表記が指定された場合を除きます。
  • 既存のファイルが新しいファイルで置き換えられる場合、新しいファイルは既存のファイルのエンコーディングを継承します。
  • 既存のファイルが、別の動作環境で作成されたか、エンコーディングが指定されていない新しいファイルで置き換えられる場合、新しいファイルは現在のセッションのエンコーディングを使用します。
注: 文字メタデータとデータ出力は、データセットの作成時に使用されたエンコーディングと異なるエンコーディングを指定すると文字化けします。この例では、出力するデータセットは内部的にASCIIとしてエンコードされます。ただし、データセットオプションではEBCDICエンコーディングが指定されています。SASは、データをEBCDICからASCIIにトランスコードしようと試みますが、データはすでにASCIIです。その結果、データが文字化けします。
data a;
x=1;
abc='abc';
run;
proc print data=a (encoding=”ebcdic”);
run;
注: 次のENCODING=の値は無効です。
  • UCS2
  • UCS4
  • UTF16
  • UTF32

比較

  • セッションエンコーディングは、ENCODING=システムオプションまたはLOCALE=システムオプションを使用して指定されます。それぞれの動作環境にはデフォルトのエンコーディングがあります。
  • LIBNAMEステートメントのINENCODING=オプション(入力ファイル用)およびOUTENCODING=オプション(出力ファイル用)を使用してSASライブラリ用のエンコーディングを指定できます。LIBNAMEステートメントオプションとENCODING=データセットオプションを両方とも指定すると、データセットオプションが使用されます。

例1: エンコーディングが混在し、トランスコーディングが抑制されたSASデータセットの作成

データセットオプションENCODING=ANYを指定すると、混在したエンコーディングが含まれるSASデータセットを作成し、入力処理または出力処理でトランスコーディングを抑止できます。
この例では、新しいデータセットMYFILES.MIXEDに、Latin1エンコーディングを使用するデータとLatin2エンコーディングを使用するデータが含まれます。データセットの処理時に、トランスコーディングは行われません。たとえば、Latin1セッションエンコーディングの正しいLatin1文字とLatin2セッションエンコーディングの正しいLatin2文字が表示されます。
libname myfiles 'SAS data-library';
data myfiles.mixed (encoding=any);
   set work.latin1;
   set work.latin2;
run;

例2: 特定のエンコーディングを使用したSASデータセットの作成

出力処理では、現在のセッションエンコーディングを手動で指定できます。このアクションは、通常のファイルアクセスに別のセッションエンコーディングを使用する場合などに必要になることがあります。
たとえば、現在のセッションエンコーディングがWlatin1の場合、ENCODING=WLATIN2を指定してエンコーディングWlatin2を使用するデータセットを作成できます。次のステートメントでは、セッションエンコーディングのかわりにWlatin2エンコーディングを使用して新しいデータセットにデータを書き込むように指示しています。エンコーディングはまた、ファイルのディスクリプタ部分にも指定されます。
libname myfiles 'SAS data-library';
data myfiles.difencoding (encoding=wlatin2);
      .
      .
      .
run;

例3: 入力処理のエンコーディングより優先する

入力処理では、ファイル内に指定されたエンコーディングを無効にして別のエンコーディングを指定できます。
この例では、現在のセッションエンコーディングがEBCDIC-870ですが、ファイルのディスクリプタ情報にはエンコーディング値EBCDIC-1047が含まれています。ENCODING=EBCDIC-870と指定すると、データのトランスコーディングは行われずに、データはEBCDIC-870エンコーディングを使用して表示されます。
proc print data=myfiles.mixed (encoding=ebcdic870);
run;

関連項目:

ステートメントとコマンドのオプション:
前のページ|次のページ|ページの先頭へ