$title Ranking Multidimensional Data

set     t       Set on which random data are defined /1*30/,

*       Other sets:

        p       /p1*p3/,
        rep     /rep1*rep2/
        vcp     /vcp1*vcp2/
        ares    /ares1*ares3/;

set     k       Ordered set over all observations in all realizations /k1*k1080/,
        k1(k)   First element of the ordered set of realizations /k1/;

parameter       StratanimB(P,rep,vcp,Ares,t)    Computed data to be sorted,
                v(k)                            Values to be ranked (one-dimensional!),
                r(k)                            Rank values (one-dimensional!),
                pct(*)                          Percentile to be computed /median 50/;

*       Run the model to generate some data.  Here we simply randomize:

loop((p,rep,vcp,ares,t), StratanimB(p,rep,vcp,ares,t) = uniform(0,1););

*       Transfer data from the multidimensional set to a single dimensional set:

scalar  count   Counter on set element in set k /0/;

loop(k1(k),
  loop((p,rep,vcp,ares,t), 
    v(k+count) = StratanimB(p,rep,vcp,ares,t);
    count = count + 1;
  );
);

*       Initialize the ranking routine:

$libinclude rank v k r pct

parameter       rank(p,rep,vcp,ares,t)  Rank order of multidimensional data;

count = 0;
loop(k1(k),
  loop((p,rep,vcp,ares,t), 
    rank(p,rep,vcp,ares,t) = r(k+count);
    count = count + 1;
  );
);

parameter       rankv(k,p,rep,vcp,ares,t)       Ranked outcomes;
loop(k1(k),
        rankv(k+rank(p,rep,vcp,ares,t),p,rep,vcp,ares,t) = StratanimB(p,rep,vcp,ares,t);
);
option rankv:3:0:1;
display rankv,pct;

$exit


$title Ranking Arrays Within Multidimensional Data set t Set on which random data are defined /1*30/, * Other sets: p /p1*p3/, rep /rep1*rep2/ vcp /vcp1*vcp2/ ares /ares1*ares3/; parameter StratanimB(P,rep,vcp,Ares,t) Computed data to be sorted median(p,rep,vcp,ares) Median values for items, v(t) Values to be ranked (one-dimensional!), r(t) Rank values (one-dimensional!), pct(*) Percentile to be computed; * Run the model to generate some data. Here we simply randomize: loop((p,rep,vcp,ares,t), StratanimB(p,rep,vcp,ares,t) = uniform(0,1);); * Initialize the ranking routine: $libinclude rank loop((p,rep,vcp,ares), * Extract the single dimensional data from this point: v(t) = StratanimB(P,rep,vcp,Ares,t); * NB pct() is used both for input and output. * Define which precentile is to be returned: pct("median") = 50; $libinclude rank v t r pct * Retrieve the computed value: median(p,rep,vcp,ares) = pct("median"); ); option median:3:0:1; display median;