private double[] exc_proportion_efficient(String measure) {
    int type = get_type(measure);
    if (((type != STATE_BASED) && (type != INTERVAL_BASED)) || measure.equals("Utilisation")) {
      throw new Sim_stat_exception("Invalid measure type. Must be state-based or interval-based.");
    }
    if (type == STATE_BASED) {
      double[] values = ((double[])((Object[])data.get(measure))[1]);
      double time = ((double[])((Object[])data.get(measure))[0])[1];
      double[] result = new double[values.length];
      for (int i=0; i < values.length; i++) {
        if (time == 0.0) {
          result[i] = 0.0;
        } else {
          result[i] = values[i]/time;
        }
      }
      return result;
    } else {
      double[] counters = ((double[])((Object[])data.get(measure))[1]);
      double total = ((double[])((Object[])data.get(measure))[0])[3];
      double[] result = new double[counters.length];
      for (int i=0; i < counters.length; i++) {
        if (total == 0.0) {
          result[i] = 0.0;
        } else {
          result[i] = counters[i]/total;
        }
      }
      return result;
    }
  }