データの並べ替え

概要:並べ替え順序

ORDER BY句を使用して、選択されない列や計算列など、テーブル内の任意の列を指定してクエリ結果を並べ替えることができます。

ORDER BY句をSELECTステートメントに含めなければ、インデックスが存在する場合でも、出力行の特定の順序(照会されたテーブルでの行の出現順など)は保証されません。ORDER BY句を指定しないと、出力行の順序は、PROC SQLの内部処理、SASのデフォルトの照合順序、および使用するオペレーティングシステムによって決まります。したがって、結果テーブルを特定の順序で表示する場合は、ORDER BY句を使用します。

詳細と例については、ORDER BY 句を参照してください。

計算された統計は、オブザベーションが処理される順序に応じて、わずかに異なる場合があります。このような変動は、浮動小数点演算によって導入された数値誤差によるものであり、その結果は概算であり、正確ではないと見なす必要があります。オブザベーション処理の順序は、マルチスレッドまたは並列処理の非決定論的影響の影響を受ける可能性があります。処理の順序は、ACCESSエンジンを介してクエリ結果を配信するDBMSなどのデータソースによって生成される観察の一貫性のない順序または非決定論的な順序によっても影響を受ける可能性があります。詳細については、数値精度 (SASプログラマガイド: エッセンシャル)とBase SASのスレッド処理 (SASプログラマガイド: エッセンシャル)を参照してください。

列を基準に並べ替える

次の例では、Countriesテーブルから国とそれらの人口を選択し、人口によって結果を並べ替えています。

proc sql outobs=12;
   title1 'Country Populations';
   title2 'First 12 Rows Only';
   select Name, Population format=comma10.
      from countries
      order by Population;
quit;
注: ORDER BY句を使用した場合、出力の順序は変更されますが、テーブルに格納された行の順序は変更されません。

注: PROC SQLのデフォルトの並べ替え順序は、昇順です。

列を基準に並べ替える

Country Populations

複数の列を基準に並べ替える

複数の列名をカンマで区切って指定することで、複数の列によって並べ替えることができます。次の例では、2つの列(ContinentとName)によって、Countriesテーブルを並べ替えています。

proc sql outobs=12;
   title1 'Countries, Sorted by Continent and Name';
   title2 'First 12 Rows Only';
   select Name, Continent
      from countries
      order by Continent, Name;
quit;

複数の列を基準に並べ替える

Countries, Sorted by Continent and Name
注: この結果では、大陸が設定されていない国が最初に表示されています。これは、昇順の並べ替えの場合、PROC SQLが欠損値を最初に並べ替えるためです。

並べ替え順序の指定

並べ替え順序 結果を並べ替えるには、昇順の場合ASCを指定し、降順の場合DESCを指定します。ORDER BY句では、列ごとに並べ替え順序を指定できます。

ORDER BY句で複数の列を指定した場合、1番目の列によって、結果の行の1番目の順序が決定されます。それ以降の列は、1番目の並べ替えで同じ値だった行の順序を決定します。次の例では、Featuresテーブルを地物の種類と名前で並べ替えています。

proc sql outobs=12;
   title1 'World Topographical Features';
   title2 'First 12 Rows Only';
   select Name, Type
      from features
      order by Type desc, Name;
quit;
注: PROC SQLのデフォルトの並べ替え順序が昇順であるため、ASCキーワードの指定は任意です。

並べ替え順序の指定

World Topographical Features

計算列を基準に並べ替える

ORDER BY句では、列の別名を指定して、計算列によって並べ替えることができます。次の例では、人口密度を計算してから、計算されたDensity列に対して並べ替えを実行しています。

proc sql outobs=12;
   title1 'World Population Densities per Square Mile';
   title2 'First 12 Rows Only';
   select Name, Population format=comma12., Area format=comma8., 
          Population/Area as Density format=comma10. 
      from countries
      order by Density desc;
quit;

計算列を基準に並べ替える

World Population Densities per Square Mile

列の位置を基準に並べ替える

数値位置を指定することにより、SELECT句内の任意の列で並べ替えることができます。名前のかわりに位置を指定して、別名が設定されていない計算列によって並べ替えることができます。次の例では、計算されるDensity列に対して別名を割り当てていません。そのかわり、ORDER BY句内の列の位置4が、SELECT句内の計算列の位置を参照しています。

proc sql outobs=12;
   title1 'World Population Densities per Square Mile';
   title2 'First 12 Rows Only';
   select Name, Population format=comma12., Area format=comma8., 
          Population/Area format=comma10. label='Density' 
      from countries
      order by 4 desc;
quit;
注: PROC SQLは、列にラベルが割り当てられている場合、別名が設定されていない列の見出しとして、そのラベルを使用します。

列の位置を基準に並べ替える

World Population Densities per Square Mile

選択していない列を基準に並べ替える

クエリに含まれていない列でクエリ結果を並べ替えることができます。たとえば、次のクエリでは、Countriesテーブルのすべての行を返し、クエリにPopulation列が含まれていないにもかかわらず、人口によってそれらの行を並べ替えています。

proc sql outobs=12;
   title1 'Countries, Sorted by Population';
   title2 'First 12 Rows Only';
   select Name, Continent 
      from countries
      order by Population;
quit;

選択していない列を基準に並べ替える

Countries, Sorted by Population

異なるソートシーケンスの指定

SORTSEQ=は、ソートシーケンスを指定するPROC SQLステートメントのオプションです。このソートシーケンスは、クエリにORDER BY句が含まれる場合にPROC SQLによって使用されます。このオプションは、使用するオペレーティングシステムのデフォルトのソートシーケンス以外のソートシーケンスを使用する場合にのみ使用します。使用可能な値には、ASCIIと英語以外のいくつかの言語などがあります。

言語照合は、SORTSEQステートメントオプションでサポートされています。詳細については、SORTSEQ=sort-table | LINGUISTICを参照してください。

注: SORTSEQ=は、ORDER BY句にのみ影響を与えます。オペレーティングシステムによって設定されているWHERE句のデフォルトの比較演算は、無効にされません。
動作環境の情報: 使用しているオペレーティングシステムのデフォルトおよびその他の並べ替え順の詳細については、使用しているオペレーティングシステムに関するSASのマニュアルを参照してください。

欠損値を含む列の並べ替え

PROC SQLは、文字データまたは数値データの前にNULLまたは欠損値をソートします。したがって、昇順の並べ替えを指定した場合、クエリ結果には最初に欠損値が表示されます。

次の例では、Continentsテーブルの行をLowPoint列によって並べ替えています。

proc sql;
   title 'Continents, Sorted by Low Point';
   select Name, LowPoint
      from continents
      order by LowPoint;
quit;

3つの大陸のLowPoint列に欠損値が含まれているため、これらの大陸が最初に出力に表示されています。このクエリでは2番目の並べ替えを指定していないため、LowPoint列の同じ値を持つ行(出力の最初の3行など)が特定の順序で表示されていないことに注意してください。通常、明示的に並べ替え順序を指定しなければ、PROC SQLの出力が特定の順序になることは保証されません。

欠損値を含む列の並べ替え

Continents, Sorted by Low Point
最終更新: 2026年4月14日