Hi everyone,
I have a SAS code for simulating the effect size and standard error for a meta-analytic data-set of K studies over L iterations. Would be very grateful if someone could help convert this to Stata code or point me to some automated way of doing so.
Many thanks
Suhail Doi
I have a SAS code for simulating the effect size and standard error for a meta-analytic data-set of K studies over L iterations. Would be very grateful if someone could help convert this to Stata code or point me to some automated way of doing so.
Many thanks
Suhail Doi
Code:
%let OR = 2;
%let phi2 = 0;
%let K = 10;
%let L=1000;
* Create a set of data with K points;
data output;
/*Start loop*/
do r=1 to &L;
do idx = 1 to &K. ;
* Step a;
theta = log(&OR.);
* Step b;
/*No Delaporte distribution implemented in SAS, using Native Binomial distribution instead*/
ub = rand("Uniform");
bl=100;
bh=1000;
n = bl + (bh-bl)*ub;
* Step c;
uc = rand("Uniform");
cl=0.82;
ch=0.993;
p_nc = cl + (ch-cl)*uc;
* Step d;
ud = RAND('UNIFORM');
dl=0.454;
dh=0.545;
tmpd=dl + (dh-dl)*ud;
b = tmpd*n* p_nc;
d = n* p_nc-b;
* Step e;
ue = RAND('UNIFORM');
el=0.1;
eh=0.55;
tmpe=el + (eh-el)*ue;
a=tmpe*n*(1 - p_nc);
c = n * (1 - p_nc) - a;
* Step f;
if mod(idx,2)=1 then do;
p_2 = RAND('BETA', b, d);
p_1 = (p_2 * exp(theta)) / (1 - p_2 + (p_2 * exp(theta)));
end;
if mod(idx,2)=0 then do;
p_1 = RAND('BETA', a, c);
p_2 = (p_1 / exp(theta)) / (1 - p_1 + (p_1 / exp(theta)));
end;
* Step g;
a_s = p_1 * n * (1 - p_nc);
c_s = (n * (1 - p_nc)) - a_s;
b_s = p_2 * n *p_nc;
d_s = (n * p_nc) - b_s;
* Step h;
p_1s = RAND('BETA', a_s, c_s);
p_2s = RAND('BETA', b_s, d_s);
* Step i;
theta_d = log((p_1s / (1 - p_1s))/(p_2s / (1 - p_2s)));
* Step j;
uj = RAND('UNIFORM');
jl=1;
jh=9;
q=(jl + (jh-jl)*uj)/10;
* Step k;
phi2 = 0.000000000000001 + (&phi2. * (1 - q) / q);
* Step l;
theta_hat = RAND('NORMAL', theta_d, phi2);
* Step m;
p_1ss = (p_2 * exp(theta_hat)) / (1 - p_2 + (p_2 * exp(theta_hat)));
* Step n - repeat step g with p_1ss and p_2;
a_ss = p_1ss * n * (1 - p_nc);
c_ss = n * (1 - p_nc) - a_ss;
* Step o;
if a_ss gt 0 and c_ss gt 0 and b_s gt 0 and d_s gt 0 then do;
var_theta_hat = 1 / a_ss + 1 / c_ss + 1 / b_s + 1 / d_s;
se=sqrt(var_theta_hat);
end;
output;
end;
end;
run;

Comment