データの並べ替え
- 概要:並べ替え順序
- 列を基準に並べ替える
- 複数の列を基準に並べ替える
- 並べ替え順序の指定
- 計算列を基準に並べ替える
- 列の位置を基準に並べ替える
- 選択していない列を基準に並べ替える
- 異なるソートシーケンスの指定
- 欠損値を含む列の並べ替え
概要:並べ替え順序
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;
列を基準に並べ替える

複数の列を基準に並べ替える
複数の列名をカンマで区切って指定することで、複数の列によって並べ替えることができます。次の例では、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;
複数の列を基準に並べ替える

並べ替え順序の指定
並べ替え順序 結果を並べ替えるには、昇順の場合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;
並べ替え順序の指定

計算列を基準に並べ替える
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;
計算列を基準に並べ替える

列の位置を基準に並べ替える
数値位置を指定することにより、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;
列の位置を基準に並べ替える

選択していない列を基準に並べ替える
クエリに含まれていない列でクエリ結果を並べ替えることができます。たとえば、次のクエリでは、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;
選択していない列を基準に並べ替える

異なるソートシーケンスの指定
SORTSEQ=は、ソートシーケンスを指定するPROC SQLステートメントのオプションです。このソートシーケンスは、クエリにORDER BY句が含まれる場合にPROC SQLによって使用されます。このオプションは、使用するオペレーティングシステムのデフォルトのソートシーケンス以外のソートシーケンスを使用する場合にのみ使用します。使用可能な値には、ASCIIと英語以外のいくつかの言語などがあります。
言語照合は、SORTSEQステートメントオプションでサポートされています。詳細については、SORTSEQ=sort-table | LINGUISTICを参照してください。
欠損値を含む列の並べ替え
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の出力が特定の順序になることは保証されません。
欠損値を含む列の並べ替え
