ラベル multilabel の投稿を表示しています。 すべての投稿を表示
ラベル multilabel の投稿を表示しています。 すべての投稿を表示

フォーマットを使って集計_マルチラベルフォーマットで連続量を任意の範囲で区切って集計

カテゴリ集計のやり方は様々ですが、連続量を任意の範囲で区切って集計する場合
フォーマットを使うと結構便利です。MULTILABEL FORMATを使えば、値の区間が重複している場合も別途に集計できて、気持ちいいです。

今、以下のように

data Q1;
call streaminit(2014131);
 do i=1 to 1000;
  X=rand('uniform');
  output;
 end;
drop i;
run;






















0から1の間に分布する1000個の値について

 0.2未満
 0.2以上0.6未満
 0.6以上
 0.5未満
 0.5以上

のカテゴリで区切って数を数えてと言われた場合

if X<0.2 then CATE=1; などなどデータステップで集計変数を定義してからプロシジャにかけてもいいですが、面倒です。

しかも区切る範囲がかぶっている(0.1という値は0.2未満で集計され、かつ0.5未満でも集計されなければならない)ので変数を分ける必要があります。

そんな時なら、例えば

proc format; 
value FREQF (multilabel) 
 low-<0.2='0.2未満'
 0.2-<0.6='0.2以上0.6未満'
 0.6-high='0.6以上'
 low-<0.5='0.5未満'
 0.5-high='0.5以上';
quit; 

のように区切る範囲をフォーマットで定義します。 (multilabel) を打てば値が重複していても
定義できます。

その上で

proc means data=Q1 MIN MAX ; 
class X /mlf
var X;
format X FREQF.
run; 

としてやれば













のように一気に集計できます。最小最大値は確認用にだしているだけです。

formatで指定することと、classステートメントに/mlfをつけることを忘れずに。