To make it more complex: I recommend removing the duplicates down left of the matrix instead of top right. It is easier to read if you have to make a selection under the headings directly.
Code:
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
// Identify this question
var thisQuestion = $('#question3631');
// Some classes and attributes
$('thead tr > *', thisQuestion).each(function(i){
$(this).attr('data-column', i);
});
$('tr.subquestions-list', thisQuestion).each(function(i){
$('> *', this).each(function(i){
$(this).attr('data-column', i);
});
});
// Hide empty rows and columns
$('col', thisQuestion).removeAttr('width');
$('table.subquestions-list thead th', thisQuestion).each(function(i) {
if($.trim($(this).text()) == '') {
var thisColumn = $(this).attr('data-column');
$('th[data-column="'+thisColumn+'"], td[data-column="'+thisColumn+'"]', thisQuestion).hide();
}
});
// Hide unnecessary selects
$('tr.subquestions-list:visible', thisQuestion).each(function(i){
$('select:visible:lt('+i+')', this).hide();
$('select:visible:eq(0)', this).hide();
});
// Remove unecessary rows and columns
$('tr.subquestions-list:visible:last', thisQuestion).hide();
var firstColumn = $('table.subquestions-list thead th:visible:eq(0)', thisQuestion).attr('data-column');
$('th[data-column="'+firstColumn+'"], td[data-column="'+firstColumn+'"]', thisQuestion).hide();
// Fix up the array row background colours
$('tr.subquestions-list:visible', thisQuestion).each(function(i){
$(this).removeClass('array1 array2').addClass('array'+(2-(i%2)));
});
});
</script>