|
|
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オプション」を使ってソートを行なった場合、
オブザベーションの並び順が異なります。
|
|||||