上一頁|下一頁

使用 CVP 引擎避免字元資料截斷

當您指定 ENCODING= 資料集選項時,輸出資料集的編碼所需的空間可能會多於原始資料集。例如,在 Windows 環境中寫入使用 UTF8 編碼的 DBCS 資料時,每個 DBCS 字元可能都需要三個位元組。若要避免資料截斷,每個變數的寬度都必須是原始資料寬度的 1.5 倍。
當您處理需要轉碼的 SAS 資料檔案時,可以要求 CVP (字元變數填補) 引擎展開字元變數的長度,以避免發生字元資料截斷 (變數的長度是用來儲存變數的每個值的位元組數)。
某種編碼之字元的位元組數與另一種編碼之相同字元的位元組數不同時 (例如,將單位元組字元集 (SBCS) 轉碼為雙位元組字元集 (DBCS) 或多位元組字元集 (MBCS) 時),可能會發生字元資料截斷。SBCS 是以一個位元組表示一個字元,而 DBCS 是以兩個位元組表示一個字元。MBCS 是以一到四個位元組的變動長度來表示字元。例如,從 Wlatin2 轉碼為 Unicode 編碼 (如 UTF-8) 時,變數長度 (位元組) 可能不足以保留值,結果便會發生字元資料截斷。
使用 CVP 引擎,您可以指定擴充量,以在轉碼之前擴充變數長度,然後處理資料。請將 CVP 引擎視為用來準備資料以進行轉碼的中繼引擎。 增加長度之後,會使用主要引擎 (如預設基本引擎) 來執行實際檔案處理。
CVP 引擎是僅適用於 SAS 資料檔案的唯讀引擎。您可以使用下列任一方式來要求字元變數擴充 (例如,使用 LIBNAME 陳述式):
  • 明確地指定 CVP 引擎,並使用預設擴充:變數長度的 1.5 倍。
  • 使用 LIBNAME 選項 CVPBYTES= 或 CVPMULTIPLIER=,隱含地指定 CVP 引擎。這些選項會指定擴充量。此外,您還可以使用 CVPengINE= 選項來指定用於處理 SAS 檔案的主要引擎;預設值是預設 SAS 引擎。
例如,下列 LIBNAME 陳述式明確地指派 CVP 引擎。字元變數的長度會以預設擴充 (將長度乘上 1.5) 來增加。例如,長度為 10 之字元變數的新長度是 15,而長度為 100 之字元變數的新長度是 150:
libname expand cvp ' SAS data-library';
附註: 擴充量必須夠大,以容納任何擴充。否則,還是會發生截斷情形。
附註: 針對使用 WHERE 運算式有條件地選取觀測值子集的處理,使用 CVP 引擎可能會影響效能。在未使用 CVP 引擎的情況下處理檔案,其速度可能會比使用 CVP 引擎處理檔案的速度還要快。例如,如果資料集具有索引,則在您使用 CVP 引擎時,將不會使用索引以最佳化 WHERE 運算式。
如需詳細資訊和範例,請參閱 SAS Statements: Reference 中的 “LIBNAME Statement” 中的 CVP 選項。
上一頁|下一頁|頁面頂端