クロス集計をやっていて、稀に(?)細分化して見たいときがあります。例えば
- 出身と好きな食べ物でクロスを取った
- 第二公用語と好きな食べ物でクロスを取った
みたなことが(ないけど)あったとします。
で、「熊本出身だけど、英語喋れる人と中国語喋る人の間では食べ物の好み違うんじゃね?」みたいなことがあるかもしれません。普通アンケートではそれぞれを聞いているので、組み合わせて新たに表に加えねばなりません。下の表のようにコード化しないと行けません*1。
東京 | つくば | 熊本 | |
日本語 | 1 | 2 | 3 |
英語 | 4 | 5 | 6 |
ドイツ語 | 7 | 8 | 9 |
中国語 | 10 | 11 | 12 |
こいつをエクセルでやってもいいんですが、Perlでやります。
use strict; use warnings; my @tate = qw/日本語 英語 ドイツ語 中国語/; my @yoko = qw/東京 つくば 熊本/; while(my $line = <DATA>){ chomp $line; my @array = split ",", $line; my $flag = ($array[0]-1)*($#yoko+1)+$array[1]; foreach my $i(1..$#tate+1){ foreach my $j(1..$#yoko+1){ if($flag == ($i-1)*($#yoko+1)+$j){ print $flag,"\n"; } } } } foreach my $tate (@tate){ foreach my $yoko (@yoko){ print "話す言葉は$tateで出身は$yoko\n"; } } __DATA__ 1,1 2,2 3,1 3,3 4,1 3,2 1,3 3,3 2,2 2,4
実行して出てくるのは下。
1
5
7
9
10
8
3
9
5
7
話す言葉は日本語で出身は東京
話す言葉は日本語で出身はつくば
話す言葉は日本語で出身は熊本
話す言葉は英語で出身は東京
話す言葉は英語で出身はつくば
話す言葉は英語で出身は熊本
話す言葉はドイツ語で出身は東京
話す言葉はドイツ語で出身はつくば
話す言葉はドイツ語で出身は熊本
話す言葉は中国語で出身は東京
話す言葉は中国語で出身はつくば
話す言葉は中国語で出身は熊本
こやつをクロス表に使ったりすると「うまー」となります。僕だけですか、まあいいですけど。
*1:なぜかコード化と呼ぶ。。。