前のページ|次のページ

照合順序

照合順序の概要

照合順序は、文字を並べ替える順序です。たとえば、SORTプロシジャを実行すると、照合順序により他の文字に対する特定の文字の並べ替え順序(高い、低い、等しい)が決まります。
デフォルトの照合順序はバイナリ照合で、セッションエンコーディングのコードページにおける各文字の場所に従って文字を並べ替えます。(セッションエンコーディングはSASセッションのデフォルトエンコーディングです。デフォルトエンコーディングは、さまざまなSAS言語要素を使用して指定できます)。並べ替え順序は、コードページ内のコードポイントの配置に直接対応します。データ処理で最も一般的に使用される2つの1バイト文字エンコーディング方法は、ASCIIとEBCDICです。OpenVMS、UNIX、Windowsの動作環境では、ASCIIエンコーディングが使用されます。IBMメインフレームコンピュータでは、EBCDICエンコーディングが使用されます。
バイナリ照合はコンピュータにとって最も効率が高く、最速の種類の照合です。ただし、バイナリ照合のレポート内の文字の検索は、この方法がよくわからない場合には多少複雑です。たとえば、バイナリ照合のレポートは、大文字で始まる単語を小文字で始まる単語と区別して表示し、アクセント記号付きの文字で始まる単語はアクセント記号のない文字で始まる単語の後に表示されます。そのため、ASCIIベースのエンコーディングでは、大文字のZは小文字のaより前に表示されます。同じように、EBCDICベースのエンコーディングでは、小文字のzは大文字のAより前に表示されます。
バイナリ照合より優先される代替照合順序を要求できます。代替照合順序を要求するには、次の順序のいずれかを指定します。
  • 変換テーブル名
  • エンコーディング値
  • 言語照合
異なる照合順序の結果は、異なる照合順序を使用して単語のリストを並べ替えた結果を示します。
異なる照合順序の結果
バイナリ
変換テーブル
言語
Aaron
aardvark
aardvark
Aztec
azimuth
Aaron
Zeus
Aaron
azimuth
aardvark
Aztec
Aztec
azimuth
cote
cote
cote
coté
côte
coté
côte
coté
côte
côté
côté
côté
zebra
zebra
zebra
zèbre
zèbre
zèbre
Zeus
Zeus
最初の列は、ASCIIベースのエンコーディングで表示される文字のバイナリ照合の結果です。大文字と小文字で始まる単語は異なるグループになるため、一貫したアルファベット順ではありません。たとえば、単語Zeusは、ASCIIベースのエンコーディング内で文字に割り当てられたコードポイントでの判断により、aardvarkより前に表示されます。
2番目の列は、小文字と大文字の並べ替えを交互にする変換テーブルを指定した結果です。変換テーブルを使用した場合、単語aardvarkはZeusより前にに表示されます。ただし、変換テーブルにより小文字aは大文字Aよりも低い重みの値が割り当てられるため、単語azimuthはAaronより前に表示されます。さらに、アクセント記号は左から右の順序で比較して並べ替えられます。たとえば、cotéはcôteより前に表示されます。
3番目の列は、ASCIIベースの2バイトlatin1エンコーディングを指定した結果です。
最後の列は、セッションロケールfr_FR (French_France)の言語照合の結果で、単語をアルファベット順にする照合アルゴリズムを使用します。このアルゴリズムでは、小文字で始まる単語が大文字で始まる単語より前に表示されます。さらに、言語照合によりフランス語のロケール仕様に基づいて、アクセントが右から左の順序で比較して並べ替えられます。
SASでは、言語照合の実装にInternational Components for Unicode (ICU)を採用しています。ICUとそのUnicode照合アルゴリズム(UCA)の実装は標準となっています。照合順序は、指定したロケールのICUにより提供されたデフォルトが使用されます。

要求の代替照合順序

代替照合順序を要求するには、次のSAS言語要素を使用します。
どちらの方法も照合順序のすべてをサポートしていないことに注意してください。たとえば、PROC SORTステートメントのSORTSEQ=オプションのみが言語照合をサポートします。ただし、PROC SORTステートメントのSORTSEQ=オプションとSORTSEQ=システムオプションの両方が、変換テーブル照合順序をサポートします。
SAS/SHAREのBASE (V9) EngineとREMOTE Engineは、すべての代替照合順序をサポートします。V9TAPE順序エンジンはデータの並べ替えに変換テーブルとエンコーディング値の使用をサポートしますが、V9TAPE Engineは言語照合をサポートしません。

変換テーブルの指定

変換テーブルは、1バイトエンコーディングから別の1バイトエンコーディングにデータをトランスコードするSASカタログエントリです。また、変換テーブルにより文字が並べ替えられます。ASCII、EBCDIC、DANISHなどの標準照合順序のような、SASが提供する変換テーブルを使用できます。または、ユーザー定義の変換テーブルを使用できます。
代替照合順序に変換テーブルを指定する場合、各文字のコードポイントを0から255の範囲の整数の重みにマッピングすることで、文字が並べ替えられます。次に、バイナリ照合が実行されます。
照合目的で、小文字と大文字を交互に並べ替える変換テーブルを作成できます。たとえば、ASCIIベースのエンコーディングでZaより前に来る状態を修正する変換テーブルを作成できます。(ただし、変換テーブルの重みの割り当てにかかわらず、大文字、小文字を含めた完全なアルファベット順の並べ替えは困難です)。また、希望する順序で特定の言語の英字を並べ替える変換テーブルも作成できます。
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プロシジャ出力の照合順序として表示するソートインジケータが含まれます。

エンコーディング値の指定

エンコーディングは、コンピュータが使用するコードポイントと呼ばれる16進数値にマッピングされた文字(通常の文字、表語文字、数字、句読点、記号、コントロール文字)のセットです。代替照合順序にエンコーディング値を指定する場合、文字はSASセッションエンコーディングから指定したエンコーディングにトランスコードされ、バイナリ照合が実行されます。マルチバイトエンコーディングを含め、ENCODING=オプションでサポートされるすべてのエンコーディング値を指定できます。変換テーブルを指定してデータをトランスコードできますが、変換テーブルは1バイトエンコーディングのみに制限されることに注意してください。
PROC SORTステートメントのSORTSEQ=オプションでエンコーディング値を指定できますが、SORTSEQ=システムオプションではエンコーディング値を指定できません。たとえば、SASデータセットを並べ替えて日本語のWindows環境に移動させるとします。セッションエンコーディングがASCIIベースでバイナリ照合が実行されている場合、ASCIIベースの2バイトエンコーディングSHIFT-JISを指定するために次のステートメントを発行できます。
proc sort data=myfiles.test sortseq='shift-jis';
   by name;
run;
SASでは、同名の変換テーブルのエンコーディング値があるかどうか確認されることに注意してください。変換テーブル名が存在する場合、その変換テーブルが使用されます。
エンコーディング値で並べ替えられたSASデータセットには、指定したエンコーディング値をCONTENTSプロシジャ出力の照合順序として表示するソートインジケータが含まれます。

言語照合の指定

言語照合は、言語のルールに従って文字を並べ替え、直感的で文化的に受け入れられる結果を作成します。結果は、辞書、電話帳、本の索引などの紙媒体で使用される照合と似ています。言語照合は、レポートやその他のデータ表示の作成と、システム間の互換性の実現に役立ちます。
SASではInternational Components for Unicode (ICU)を採用しています。ICUは、Unicode照合アルゴリズム(UCA)と互換性のある言語照合のルーチンを提供するオープンソースライブラリです。UCAは、Unicode文字列を比較して並べ替えができる標準です。
SORTSEQ=システムオプションは言語照合をサポートしないため、言語照合を要求するには、PROC SORTステートメントのSORTSEQ=オプションを使用する必要があります。たとえば、次のステートメントでは、French_Franceのロケールに従って言語的に照合するSORTプロシジャを実行します。
options locale=fr_FR;

proc sort data=myfiles.test sortseq=linguistic;
   by name;
run;
言語照合を要求すると、SASセッションロケール用にICUで提供されたデフォルトの言語照合アルゴリズムが使用されます。このアルゴリズムには、各地域の言語、データのフォーマティングなどの規則、文化が反映されています。アルゴリズムを変更するには、LINGUISTICキーワードの後にオプションをかっこで囲んで指定します。たとえば、異なるロケールを指定できます。また、小文字を大文字より前にしたり、その逆の順序にするCASE_FIRST=オプションも指定できます。その他いろいろな指定が可能です。通常は、ICUによりさまざまな言語とロケールがデフォルトで関連付けられるため、オプションを指定する必要はありません。言語オプションの詳細については、照合順序オプションのSORTSEQ=オプション、またはBase SASプロシジャガイド内のPROC SORTステートメントのSORTSEQ=オプションを参照してください。
言語的に並べ替えられたSASデータセットには、CONTENTSプロシジャ出力の照合順序LINGUISTICを表示するソートインジケータが含まれます。このソートインジケータとともに、データセットにより言語照合順序の完全な説明がファイルのディスクリプタ情報に記録されます。この情報はCONTENTSプロシジャ出力にも表示されます。
前のページ|次のページ|ページの先頭へ