数学が苦手な方は,面倒臭そうだなぁと思われるかもしれませんが、
難しいことは一切なく、至ってシンプルな話です。
例を元に説明した方が解り易いので、下記に示していきます。
小学生の時に、時速の平均を求める授業があったと思いますが、これこそが加重平均になります。
↓のような問題です。
Aさん家族は車でドライブに出かけました。 行きは渋滞もなく平均時速90kmで2時間で目的地に着き、 帰りは渋滞に巻きこまれたため、平均時速60kmで3時間かかりました。 往復の平均時速を求めなさい。
覚えがありませんか?
単に時速を平均するのは間違いで、走行総距離 / 走行総時間にて算出する必要があるのはご存知のことかと思います。
往復の平均時速を求める式は、
行きに走った距離(時速 × 行きに掛かった時間) + 帰りに走った距離(時速 × 帰りに掛かった時間)
(行きに掛かった時間 帰りに掛かった時間)
となり、90 * 2 + 60 * 3 / (2 + 3) = 72と求められることが解ります。
これをSASで求めるには、Summmary or meansプロシジャで加重平均を求めればよいのです。
まず、上記情報をデータセットに格納します。
<SAS PGM>
data jisoku;
input jisoku hour ;
cards;
90 2
60 3
;
※<SAS PGM>の部分は先頭2文字が全角ブランクになってますので、コピペの際はご注意下さい。
上記データが出来たら、Summaryプロシジャにて加重平均を求めます。
ここで使用するステートメントがweightです。
使用方法は下記の通り
<SAS PGM>
proc summary data = jisoku ;
var jisoku; * ←平均を求めるのは時速なので、jisokuを指定 *;
weight hour; * 加重を掛けるのは時間になるので、hour *;
output out = jisoku_mean
mean = ;
run ;
proc print;
run;
proc summary data = jisoku ;
var jisoku; * ←平均を求めるのは時速なので、jisokuを指定 *;
weight hour; * 加重を掛けるのは時間になるので、hour *;
output out = jisoku_mean
mean = ;
run ;
proc print;
run;
こちらの結果が、
となり、問題なく平均時速が算出されていることが分かります。
ここで、数学苦手な方はこう思うかもしれません。
weightを使用するのは分かったけど、どういう時に何を指定するのかが分からないんだ!!と。
数学が得意な方は、重み付けの計算なので、迷うこともないかもしれませんが、
苦手な方は意外と迷うものかと思います(まぁ、私もそうです)。
でも実は簡単なことで、平均値を求める項目(今回は時速)を算出する際に、
分母となる項目を指定すれば良いのです。
つまり、今回の例では求める平均値が時速で、元々、距離 / 時間で求めるわけですから、
weightには時間=hourを指定すればOKなんです。
少し、別のデータでも試してみたいと思います。
今回は、売上データを使います。
<A店の売上データ>

上記、A店の売上データから、A店の収益率を求めてみましょう。
(収益率 = 収益額 / 売上金額で求めます)
では、シィンキングタァーーイム!!
の間にデータ作成をば....。
<SAS PGM>
data uriage ;
input item $ uriage cost_gen cost_sou cost_jimu syueki_g syueki_r ;
informat uriage cost_gen cost_sou cost_jimu syueki_g comma10.0 syueki_r 4.2 ;
cards ;
商品A 30,000 17,280 5,760 5,760 1,200 0.04
商品B 6,250 3,450 1,150 1,150 500 0.08
商品C 20,000 11,460 3,820 3,820 900 0.045
商品D 14,000 7,980 2,660 2,660 700 0.05
;
<SAS PGM>
data uriage ;
input item $ uriage cost_gen cost_sou cost_jimu syueki_g syueki_r ;
informat uriage cost_gen cost_sou cost_jimu syueki_g comma10.0 syueki_r 4.2 ;
cards ;
商品A 30,000 17,280 5,760 5,760 1,200 0.04
商品B 6,250 3,450 1,150 1,150 500 0.08
商品C 20,000 11,460 3,820 3,820 900 0.045
商品D 14,000 7,980 2,660 2,660 700 0.05
;
↓こんなデータが出来るかと思います。
では、解答です。
まず、今回のケースで求めるのはA店の収益率になるので、
A店全体の収益額 / A店全体の売上金額になります。
Summaryプロシジャで売上金額と収益額の合計値を求めて、
収益額(合計) / 売上金額(合計)で求まります。
...ん??
これで求まるけど...??
じゃありませんか?
ここで上記の時速の例と比較してみてください。
時速は距離 / 時間で、収益率は収益額 / 売上金額です。
式でみると、X = Y / Zで同じです。
ピンと来た方がいるかもしれませんね。
今回のケースの収益率を時速に、売上金額を時間に置き換えて考えることが出来ます。
A店の収益率は、合計値による計算で求まり、時速の平均も合計値の計算で求まります。
ここまで書いたら、見えてきませんか?
そうです。
加重平均です。
weightです。
まぁタイトルですしね、weightの使用法を書いてる訳ですからね。
そりゃ分かるし、くどい!!って方も多いかとは思いますが、もうちょいの辛抱です。
算出する平均値は収益率なのでvarにsyueki_r、
加重項目は売上金額なのでweigtにuriageを指定して、summaryです。
<SAS PGM>
proc summary data = uriage ;
var syueki_r ;
weight uriage ;
output out = uriage_mean
mean = ;
run ;
proc print;
run;
プロシジャ1回の実行で求まります。
<結果>
ご心配な方は、Excelなどでも計算してみてください。
売上の合計が70250、収益額の合計が3300で、収益率が0.046975と求まると思います。
今回の例で、データステップが1回減るだけじゃん、と思われる方もいらっしゃるかもしれませんが、
SAS変数もデータから減らせる(時速の例で言えば、総距離を持つ必要はありません)ので、
結構便利かと思います。
以上がweightを使用した加重平均の求め方です。
数学が苦手な方が、おぉ意外と簡単だし、使えそうじゃん!!
と感じてもらえたら幸いです。
あとは、ご自身で少し試していただければ、すぐに慣れるかとは思いますので、是非!



0 件のコメント:
コメントを投稿