クロス集計を細分化するときに使うかも、使わないかも

クロス集計をやっていて、稀に(?)細分化して見たいときがあります。例えば

  • 出身と好きな食べ物でクロスを取った
  • 第二公用語と好きな食べ物でクロスを取った

みたなことが(ないけど)あったとします。
で、「熊本出身だけど、英語喋れる人と中国語喋る人の間では食べ物の好み違うんじゃね?」みたいなことがあるかもしれません。普通アンケートではそれぞれを聞いているので、組み合わせて新たに表に加えねばなりません。下の表のようにコード化しないと行けません*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:なぜかコード化と呼ぶ。。。