SORTについて
[OS]all
[リリース] 6.09E,6.12,8.1,8.2
[キーワード] SORT, EQUALS オプション, SQL, SORT BY
[質問]
SQLプロシジャのORDER-BY アイテムを使ってソートを行なった結果と、
SORTプロシジャを使ってソートを行なった結果が異なります。
(違いが発生するデータセット例:test2aとtest2bのオブザベーションの並び順が異なります)
DATA test1 ; INPUT var1 var2 $ var3 $ ; DATALINES ; 2 BBB 2_BBB_3 1 BBB 1_BBB_1 2 AAA 2_AAA_2 2 AAA 2_AAA_1 1 BBB 1_BBB_2 2 BBB 2_BBB_4 2 BBB 2_BBB_2 2 BBB 2_BBB_1 1 AAA 1_AAA_2 1 AAA 1_AAA_1 1 BBB 1_BBB_3 ; RUN ; PROC SORT DATA=test1 OUT=test2a ; BY var1 var2 ; RUN ; PROC SQL ; CREATE TABLE test2b AS SELECT * FROM test1 ORDER BY var1,var2 ; QUIT ;
[回答]SQLプロシジャのORDER-BYアイテムによるソートは、 SORTプロシジャを「NOEQUALS」オプション付きで実行した場合と同じ結果になります。 例)
PROC SORT DATA=test1 OUT=test2c NOEQUALS; BY var1 var2 ; RUN ;
「EQUALS」オプションは、「SORT時のインプットとして読み込んだデータセット
にあるオブザベーションの相対位置を保持する」機能を持ち、
SORTプロシジャにおいてはデフォルトです。
なお、ソート処理によって出力されるオブザベーションの順番は、 変数の数や各変数の属性などによって決定されます。
DATA test1a ; INPUT var1 var2 $ var3 $ ; DATALINES ; (入力データ) ; RUN ; DATA test1b ; LENGTH var4-var20 $ 200 ; INPUT var1 var2 $ var3 $ ; DATALINES ; (入力データ) ; RUN ;
たとえば、上記のデータセット「test1a」および「test1b」では、変数の数に違いがあるため、
SORTプロシジャの「NOEQUALSオプション」を使ってソートを行なった場合、
オブザベーションの並び順が異なります。
|