【SAS】SCAN関数を活用して「1-1」みたいな値を持つ文字変数をソートする
- テストデータ作成
DATA test; INPUT id $; CARDS; 2-2 1-3 1-9 2-6 1-4 2-5 1-6 1-7 1-8 2-7 1-10 2-1 1-2 2-4 2-3 1-1 2-8 1-5 2-9 2-10 ; RUN;
- データセットの中身
この文字変数を
1-1
1-2
1-3
1-4
1-5
1-6
1-7
1-8
1-9
1-10
2-1
2-2
2-3
2-4
2-5
2-6
2-7
2-8
2-9
2-10
↑こうソートしたいけど、このままSORTプロシジャを実行すると
PROC SORT DATA=test; BY id; RUN;
うまくいかない。
SCAN関数を使ってソートに使う変数を作る
「-」を区切り文字として変数idを区切って、それぞれ別々の変数id1、id2に入れる
DATA test2; SET test; /*「-」の前の部分を変数id1に入れる*/ id1=SCAN(id,1,'-'); /*「-」の後ろの部分を変数id2に入れる*/ id2=SCAN(id,2,'-'); /*id2の長さが1だったら「0」を前につける*/ IF LENGTH(id2)=1 THEN id2='0'||id2; RUN;
id1、id2でソートすると
PROC SORT DATA=test2; BY id1 id2; RUN;
想定通りにidがソートされた。
id1、id2がいらないならDROPステートメントとかで削除する
DATA test2; SET test2; DROP id1 id2; RUN;