上一頁|下一頁

ENCODING= 資料集選項

覆寫用於讀取或寫入 SAS 資料集的編碼。

有效期限: DATA 步驟和 PROC 步驟
類別: 資料集控制

語法

ENCODING= ANY | ASCIIANY | EBCDICANY | encoding-value

語法描述

ANY

指定不進行轉碼。

附註 ANY 是二進位的同義字。因為資料是二進位,所以與實際編碼無關。

ASCIIANY

指定混合編碼是 ASCII 編碼時不進行轉碼。

EBCDICANY

指定混合編碼是 EBCDIC 編碼時不進行轉碼。

encoding-value

指定編碼值。

請參閱 NLS 的編碼

詳細資料

ENCODING= 的值指出 SAS 資料集的編碼與目前工作階段編碼不同。當您讀取資料集中的資料時,SAS 會將資料從指定的編碼轉碼為工作階段編碼。 當您將資料寫入資料集時,SAS 會將資料從工作階段編碼轉碼為指定的編碼。
輸入處理
輸入處理的編碼預設是透過下列方式決定:
  • 如果工作階段編碼與檔案中指定的編碼不同,則 SAS 會將資料轉碼為工作階段編碼。
  • 如果檔案中未指定編碼,但是檔案的資料表示法與目前工作階段的編碼不同,則 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= 資料集選項,則 SAS 會使用資料集選項。

範例

範例 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 的資料集。下列陳述式會告訴 SAS 使用 Wlatin2 編碼將資料寫入至新資料集,而非使用工作階段編碼。檔案的描述項部分也會指定編碼。
libname myfiles 'SAS data-library';
data myfiles.difencoding (encoding=wlatin2);
.
.
.
run;

範例 3: 覆寫輸入處理的編碼

針對輸入處理,您可以覆寫檔案中指定的編碼,並指定不同的編碼。
在此範例中,目前工作階段編碼是 EBCDIC-870,但是檔案的描述項資訊中具有編碼值 EBCDIC-1047。指定 ENCODING=EBCDIC-870,SAS 就不會轉碼資料,而是使用 EBCDIC-870 編碼來顯示資料。
proc print data=myfiles.mixed (encoding=ebcdic870);
run;

請同時參閱

下列項目中的概念討論:NLS 的編碼
陳述式和命令中的選項:
上一頁|下一頁|頁面頂端