|
|
制御データセットから範囲指定のフォーマットを作成する方法
[OS] ALL
[リリース] 6.12, 8.2
[キーワード] FORMAT, CNTLIN
[質問]制御データセットを使って、数値変数に範囲指定のフォーマットを作成するにはどのようにしたらよいでしょうか?
[回答]制御データセットで、数値変数に対する範囲指定のフォーマットを作成する場合、まず次の変数を持ったSASデータセットを作成する必要があります。
範囲に上限値がない場合は変数ENDの値をブランク、下限値がない場合には変数STARTの値をブランクにします。たとえば、80以上を「A」、80未満-70以上「B」、70未満-60以上「C」、60未満を「D」とするようなフォーマット「RANK」を作成するための制御データセットは、次の内容になります。 FMTNAME LABEL TYPE START END SEXCL EEXCL HLO RANK D N 60 N Y L RANK C N 60 70 N Y RANK B N 70 80 N Y RANK A N 80 N N H 制御データセットを作成し、フォーマットを作成するプログラム例は、次の通りです。 プログラム例
DATA rank;
INFILE cards DSD;
INPUT fmtname $ label $ type $ start $
end $ sexcl $ eexcl $ hlo $;
CARDS;
D,N,,60,N,Y,L
RANK,C,N,60,70,N,Y,
RANK,B,N,70,80,N,Y,
RANK,A,N,80,,N,N,H
;
RUN;
/*制御データセットよりフォーマットを定義*/
PROC FORMAT CNTLIN=rank;
RUN;
/* 確認 */
DATA a;
INPUT a;
CARDS;
59
60
69
70
79
80
81
;
RUN;
PROC PRINT;
RUN;
上記プログラムの実行結果は次のようになります。 OBS a 1 D 2 C 3 C 4 B 5 B 6 A 7 A 次に示す、FORMATプロシジャを使ってフォーマットを作成するプログラムでも、同じ結果を得ることができます。 プログラム例
/*FORMATプロシジャを使ったプログラム例*/
PROC FORMAT;
VALUE rank LOW -< 60 = 'D'
60 -< 70 = 'C'
70 -< 80 = 'B'
80 - HIGH = 'A';
RUN;
|
||||||||||||||||||