順列・組み合わせの計算方法
[OS]ALL
[リリース] 6.12, 8.1, 8.2
[キーワード] DATA STEP, PERM, COMB, GAMMA
[質問]初等確率論における「順列(permutation)」および「組み合わせ(combination)」を計算する良い方法はありますか。
[回答]SAS System 8以降では、それぞれPERM関数、COMB関数を用いることにより、簡単に計算できます。
SAS 6.12(またはそれ以前のバージョン)をご利用の場合には、GAMMA関数を用いる方法が簡便です。具体的には、Γ(x)=(x-1)!」という関係式を利用します。
data _null_; n=12; r=5; p=gamma(n+1)/gamma(n-r+1); /*nPrをp に代入する*/ c=gamma(n+1)/gamma(r+1)/gamma(n-r+1); /*nCrをc に代入する*/ put p= c=; /*pは95040 、cは792*/ run; なお、nが大きな場合には、以下のようにLGAMMA関数を利用する必要がありま す。これは、GAMMA関数に大きな引数を与えると、オーバーフローが発生する ためです。 data test; n=200; r=3; p=exp(lgamma(n+1)-lgamma(n-r+1)); /* nPr */ c=exp(lgamma(n+1)-lgamma(r+1)-lgamma(n-r+1)); /* nCr */ run; |