call sortc(sortn sorth)ルーチンで降順ソートする小技

call sortc(sortn sorth)ルーチンについては何度か取り上げています。

・横方向(列方向)にcall sortn,call sortcルーチンを使ってソート処理をかける
http://sas-tumesas.blogspot.jp/2013/10/call-sortncall-sortc.html

・CHOOSEN(C)関数とCALL SORTN(C)ルーチンで、横に可変的に増える変数をソートして指定した順番にくる変数を取得する
http://sas-tumesas.blogspot.jp/2014/02/choosenccall-sort.html

call sort系ルーチンには降順指定がないため、基本的には昇順しかできません。
それをどうしたら降順にできるかという話です。
※もしかしたら、既にどこかの記事で話したか、或いはamatsuさんからコメント等で教えて貰った内容かもしれません。最近、自分でも何を投稿したか忘れてて、もし重複してたらすみません。

今、

data Q1;
X1='S';
X2='Y';
X3='O';
X4='G';
X5='I';
run;



があって

data A1;
set Q1;
call sortc(of X1-X5);
run;

とすると






このように昇順になります。

これを降順にするには

data A2;
set Q1;
call sortc(of X5-X1);
run;

というように指定を逆向きにすれば






と、結果的に降順になります。

amatsuさんが
記事:変数指定は「V100-V1」のように逆にもできる。
http://sas-boubi.blogspot.jp/2014/06/v100-v1.html

で紹介されていたことと理屈は同じです。

引数に配列を使う場合は、配列に要素を指定する場合の、指定順番を逆にすれば
OKです。

0 件のコメント:

コメントを投稿