image thumbnail
from Summer Olympic Medals 1896-present by Bill McKeeman
Ways of looking at the record of summer olympic medals

rankGSB(medals)
% FILE:    rankGSB.m
% PURPOSE: team rank base on gold, then silver, then bronze
% EXAMPLE:
%    ranks = rankGSB(medals);
%  ranks(i,j) is the rank of team i in olympiad j

function ranks = rankGSB(medals)
  scores = zeros(size(medals));
  for i = 1:size(medals,2)     % each olympiad
    for j = 1:size(medals,1)   % each team
      m = medals(j,i);
      scores(j,i) = sum(m.gold*1000000)+sum(m.silver*1000)+sum(m.bronze);
    end
  end
  [sorted,idx]=sort(scores, 'descend');
  ranks = inf(size(sorted));   % start unrated
  for i = 1:size(sorted,2)     % each olympiad
    for j = 1:size(sorted,1)   % each team
      ij = idx(j,i);           % team number
      if sorted(j,i)==0
        ranks(ij,i)=inf;
      else
        ranks(ij,i) = j;       % set rank
      end
      sji = sorted(j,i);
      if j>1 && sji~= 0 && sji==sorted(j-1,i)
        ranks(ij,i) = ranks(idx(j-1,i),i);   % tie
      end
    end
  end
end

Contact us at files@mathworks.com