皆さん こんにちわ
まず、この手術台帳データを扱うには、必ずFSを指定しないといけません。タブならば FS="\t" カンマならば FS="," です。これをBEGINパターンでセットします。
BEGIN{FS="\t"} # セパレータがタブの場合。カンマならば FS=","と指定。
以下のスクリプトは、タブがセパレータであることを想定しています。
まずは男女別集計です。$10に注目して、こんなスクリプトは如何?
BEGIN{FS="\t"}
{$10 ~ /男/ ? ++man : ++woman}
END{printf("男女別集計\n男性 %d人\n女性 %d人\n",man,woman)}
注目するフィールドを36に変えれば、疾患の良悪性に注目した集計ができます。
BEGIN{FS="\t"}
{$36 ~ /良/ ? ++benign : ++malignant}
END{printf("良悪性別集計\n良性 %d人\n悪性 %d人\n",benign,malignant)}
年齢の平均を出します。男女別にしましょうか。
BEGIN{FS="\t"}
{$10 ~ /男/ ? ++man : ++woman}
{$10 ~ /男/ ? nen_man += $9 : nen_woman += $9}
{nenrei += $9}
END{printf("平均年齢 %.2f歳\n",nenrei/NR);
printf(" 男性 %.2f歳\n",nen_man/man);
printf(" 女性 %.2f歳\n",nen_woman/woman)}
診療科別・所属別集計です。診療科や所属がいろいろあってもいいように、連想配列を使ってみましょう。このテクニックは医師別集計でも使えます。
BEGIN{FS="\t"}
{++sinryouka[$11]}
{++syozoku[$12]}
END{print "診療科別集計";
for(i in sinryouka){
print i,sinryouka[i];}
print "";
print "所属別集計";
for(i in syozoku){
print i,syozoku[i];}
}
興味のある方は、お問い合わせください。もとのデータが配布できると思います。
また、面白い集計の例を教えてください。対応するスクリプトをご用意いたします。
初出 NIFTY-Serve「みんみんネット」1996/09/28 (Sat) 20:16:56