上一頁|下一頁

定序序列

定序序列概觀

定序序列是字元的排序順序。例如,執行 SORT 程序時,定序序列決定特定字元與其他字元的相對排序順序 (高、低或等於)。
預設定序序列是二進位定序,而二進位定序是根據每個字元在工作階段編碼之字碼頁中的位置,來排序字元。(工作階段編碼是 SAS 工作階段的預設編碼。預設編碼可以使用各種 SAS 語言元素來指定)。排序順序直接對應至字碼頁內的字碼指標排列。資料處理廣泛使用的兩個單位元組字元編碼方法是 ASCII 和 EBCDIC。OpenVMS、UNIX 和 Windows 作業環境使用 ASCII 編碼,IBM 大型主機電腦則使用 EBCDIC 編碼。
二進位定序是最快的定序類型,因為它對電腦而言最具效率。不過,如果您不熟悉此方法,則尋找二進位定序報表內的字元可能十分困難。 例如,二進位定序報表會依序列出開頭為大寫字元的單字、開頭為小寫字元的單字、開頭為無重音字元的單字以及開頭為重音字元的單字。因此,對 ASCII 型編碼而言,大寫字母 Z 是在小寫字母 a 的前面。同樣地,對 EBCDIC 型編碼而言,小寫字母 z 是在大寫字母 A 的前面。
您可以要求可覆寫二進位定序的替代定序序列。若要要求替代定序序列,請指定下列其中一個序列:
  • 轉譯表格名稱
  • 編碼值
  • 語言定序
不同定序序列的結果說明使用不同的定序序列來排序短單字清單的結果:
不同定序序列的結果
二進位
轉譯表格
編碼值
語言
Aaron
aardvark
Aaron
aardvark
Aztec
azimuth
Aztec
Aaron
Zeus
Aaron
Zeus
azimuth
aardvark
Aztec
aardvark
Aztec
azimuth
cote
azimuth
cote
cote
coté
cote
côte
coté
côte
coté
coté
côte
côté
côte
côté
côté
zebra
côté
zebra
zebra
zèbre
zebra
zèbre
zèbre
Zeus
zèbre
Zeus
第一欄顯示以 ASCII 型編碼表示之字元的二進位定序結果。因為開頭為大寫和小寫字元的單字屬於不同的群組,所以依字母順序排列不一致。例如,基於指派給 ASCII 型編碼內字元的字碼指標,單字 Zeus 會出現在 aardvark 的前面。
第二欄顯示指定可替換小寫和大寫字元順序之轉譯表格的結果。如果您使用轉譯表格,則單字 aardvark 會出現在 Zeus 的前面。不過,單字 azimuth 會出現在 Aaron 的前面,因為轉譯表格指派給小寫字元 a 的加權值小於大寫字元 A的加權值。 此外,重音符號是從左到右排序。例如,coté 是在 côte 的前面。
第三欄顯示指定 ASCII 型雙位元組 latin1 編碼的結果。
最後一欄顯示工作階段地區設定 fr_FR (French_France) 之語言定序的結果,而此地區設定使用定序演算法來將單字按字母順序排列。此演算法指定開頭為小寫字元的單字出現在開頭為大寫字元的單字的前面。此外,因為法文地區設定規格,所以此語言定序會從右到左排序重音符號。
SAS 已採用 International Components for Unicode (ICU) 來實作語言定序。ICU 和其 Unicode Collation Algorithm (UCA) 實作已變成一種標準。定序序列是 ICU 針對所指定地區設定提供的預設值。

要求替代定序序列

若要要求替代定序序列,請使用下列 SAS 語言元素:
請注意,這兩種方法都不支援所有定序序列。例如,只有 PROC SORT 陳述式中的 SORTSEQ= 選項才支援語言定序。不過,PROC SORT 陳述式中的 SORTSEQ= 選項和 SORTSEQ= 系統選項都支援轉譯表格定序序列。
SAS/SHARE 的 BASE (V9) 引擎和 REMOTE 引擎支援所有替代定序序列。V9TAPE 循序引擎支援使用轉譯表格和編碼值來排序資料,但是 V9TAPE 引擎不支援語言定序。

指定轉譯表格

轉譯表格是將資料從某種單位元組編碼轉碼為另一種單位元組編碼的 SAS 目錄項目。轉譯表格也會在排序字元時對其進行重新排序。轉譯表格可以是 SAS 提供的表格 (如 ASCII、EBCDIC 或 DANISH 這類的標準定序序列),也可以是使用者定義的轉譯表格。
當您指定替代定序序列的轉譯表格時,會藉由將每個字元的字碼指標對應至 0 到 255 範圍內的整數加權值,來重新排序字元。然後,執行二進位定序。
若要進行定序,您可以建立轉譯表格,而轉譯表格會排序字元,以替換小寫和大寫字元。例如,您可以建立轉譯表格來更正 ASCII 型編碼中 Z 出現在 a 前面的情況 (不過,不論轉譯表格中的加權指派為何,都很難達到考量到字元大小寫的真正字母排序)。您也可以建立轉譯表格,依預期順序來排序特定語言的字母字元。
TRANTAB 程序會建立、編輯和顯示轉譯表格。例如,您可以顯示轉譯表格來檢視字元加權值。 SAS 所提供的轉譯表格是儲存在 SASHELP.HOST 目錄中。任何您所建立或自訂的轉譯表格則是儲存在 SASUSER.PROFILE 目錄中。轉譯表格的項目類型為 TRANTAB。如需轉譯格的詳細資訊,請參閱 TRANTAB 程序
您可以在 PROC SORT 陳述式中使用 SORTSEQ= 選項或使用 SORTSEQ= 系統選項,來指定轉譯表格。例如,如果作業環境預設使用 ASCII 型 Wlatin1 編碼來進行排序,而您想要使用替換大寫和小寫字元的轉譯表格來進行排序,請發出下列陳述式以指定 SAS 轉譯表格 FRSOLAT1:
proc sort data=myfiles.test sortseq=FRSOLAT1; 
by name;
run;
使用轉譯表格進行排序的 SAS 資料集包含一個排序指示器,以顯示指定的轉譯表格名稱作為 CONTENTS 程序輸出中的定序序列。

指定編碼值

編碼是已對應至電腦所使用之十六進位值 (稱為字碼指標) 的一組字元 (字母、語標、數字、標點符號、符號和控制字元)。當您指定替代定序序列的編碼值時,會將字元從 SAS 工作階段編碼轉碼為指定的編碼,然後執行二進位定序。 您可以指定 ENCODING= 選項支援的所有編碼值 (包含多位元組編碼)。請注意,指定轉譯表格可以轉碼資料,但是轉譯表格只限於單位元組編碼。
您可以在 PROC SORT 陳述式中使用 SORTSEQ= 選項來指定編碼值,但是不可以在 SORTSEQ= 系統選項中指定編碼值。例如,您想要排序 SAS 資料集,然後將它傳輸至日文 Windows 環境。如果工作階段編碼是 ASCII 型,而且二進位定序作用,則可以發出下列陳述式來指定 ASCII 型雙位元組編碼 SHIFT-JIS:
proc sort data=myfiles.test sortseq='shift-jis';
by name;
run;
請注意,SAS 會檢查所有同名轉譯表格的編碼值。 如果轉譯表格名稱已存在,則 SAS 會使用轉譯表格。
使用編碼值進行排序的 SAS 資料集包含一個排序指示器,以顯示指定的編碼值作為 CONTENTS 程序輸出中的定序序列。

指定語言定序

語言定序會根據語言規則來排序字元,並產生直覺式且文化上可接受的結果。結果與書面資料 (如字典、電話簿和書籍索引) 中所用的定序類似。語言定序不僅適用於產生報表或其他資料簡報,也適用於達到系統之間的相容性。
SAS 併入 International Components for Unicode (ICU),後者是開放原始碼資料館,提供與 Unicode Collation Algorithm (UCA) 相容之語言定序的常式。UCA 是可以用來比較和排序 Unicode 字串的標準。
若要要求語言定序,您必須在 PROC SORT 陳述式中使用 SORTSEQ= 選項,因為 SORTSEQ= 系統選項不支援語言定序。 例如,下列陳述式會讓 SORT 程序依照 French_France 地區設定進行語言定序:
options locale=fr_FR;

proc sort data=myfiles.test sortseq=linguistic;
by name;
run;
要求語言定序時,SAS 會使用 ICU 針對 SAS 工作階段地區設定提供的預設語言定序演算法。此演算法會反映地理區域的語言、當地慣例 (如資料輸出格式) 和文化。在 LINGUISTIC 關鍵字後面指定以括號括住的選項,就可以修改演算法。 例如,您可以指定不同的地區設定;您可以指定 CASE_FIRST= 選項,將小寫字元定序在大寫字元的前面,反之亦然;以此類推。因為 ICU 會關聯預設值與各種語言和地區設定,所以一般並不需要指定選項。如需語言的詳細資訊,請參閱 定序序列選項 中的 SORTSEQ= 選項或 Base SAS Procedures Guide中 PROC SORT 陳述式中的 SORTSEQ= 選項。
以語言排序的 SAS 資料集包含一個排序指示器,以在 CONTENTS 程序輸出中顯示定序序列 LINGUISTIC。除了排序指示器之外,資料集還會在檔案的描述項資訊中記錄語言定序序列的完整描述,而此描述也會顯示在 CONTENTS 程序輸出中。
上一頁|下一頁|頁面頂端