$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;