制御データセットから範囲指定のフォーマットを作成する方法
[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; |