これが DOM メソッドであり、innerHTML が非常に人気がある理由を強調しています。最近の DOM メソッドの実行は非常に高速ですが、使用する正当な理由がない限り、コードの量は少し面倒です。
コードの量は、いくつかのヘルパー関数を使用して大幅に削減できるため、innerHTML メソッドと同等です。
var school_list = "School 1, School 2, School 3" 
var pct_list = "Percent1, Percent2, Percent3" 
function makeTable(schools, percents) {
  // Turn input strings into arrays
  var s = schools.split(',');
  var p = percents.split(',');
  // Setup DOM elements
  var table = document.createElement('table');
  var tbody = table.appendChild(document.createElement('tbody'));
  var oRow = document.createElement('tr');
  var row;
  oRow.appendChild(document.createElement('td'));
  oRow.appendChild(document.createElement('td'));
  table.appendChild(tbody);
  // Write header
  row = tbody.appendChild(oRow.cloneNode(true));
  row.childNodes[0].appendChild(document.createTextNode('School'));
  row.childNodes[1].appendChild(document.createTextNode('Percent'));
  // Write rest of table
  for (var i=0, iLen=s.length; i<iLen; i++) {
    row = tbody.appendChild(oRow.cloneNode(true));
    row.childNodes[0].appendChild(document.createTextNode(s[i]));
    row.childNodes[1].appendChild(document.createTextNode(p[i]));
  }
  document.body.appendChild(table);
}
load イベントの後に呼び出すことも、ドキュメント内の適切な場所に配置することもできます。
window.onload = function() {
  makeTable(school_list, pct_list);
}