下面是一个关于非参数模型在以等级资料为终点的非劣效性临床试验中的应用的宏程序,按照文章中程序写好后运行不成功,提示参数传递错误,请高手指点!
%MACRO PERM_BF (DATA = , VAR = , GROUP = , MARGIN = , LOOP = 10000);
proc freq data = daten; tables & GROUP / out = ninoprint;
proc iml;
use &date; read all var {&VAR} into x; read all var {&GROUP} into group;
use n_j; read all var {count} into ni; n1 = ni[1]; n2 = ni[2]; N = n1 + n2;
perm = j(N, 1, 0); o_ranks = j(N, 1, 0); o_ranks_1 = j(n1, 1, 0);o_ranks_2 = j(n2, 1, 0);
w_ranks_1 = j(n1, 1, 0); w_ranks_2 = j(n2, 1, 0);
mean_o_ranks_1 = 0; mean_o_ranks_2 = 0;
sigma_1 = 0; sigma_2 = 0;
V_N = 0; T_0 = 0; T_perm = 0; pvalue_t = 0; pvalue_perm = 0;
o_ranks = ranktie(x);
o_ranks_1 = o_ranks [1:n1]; o_ranks_2 = o_ranks [(n1 + 1):N];
w_ranks_1 = ranktie (x[1:n1]); w_ranks_2 = ranktie (x[(n1 + 1):N]);
mean_o_ranks_1 = sum(o_ranks_1)/n1;
mean_o_ranks_2 = sum(o_ranks_2)/n2;
releff = 1/N * (mean_o_ranks_2 - mean_o_ranks_1) + 1/2;
sigma_1 = 1/(n1 - 1) * (o_ranks_1 - w_ranks_1 - mean_o_ranks_1 + (n1 + 1)/2) * * 2;
sigma_2 = 1/(n2 - 1) * (o_ranks_2 - w_ranks_2 - mean_o_ranks_2 + (n2 + 1)/2) * * 2;
V1 = sigma_1/(n2 * * 2); V2 = sigma_2/(n1 * * 2);
V_N = N * (V1/n1 + V2/n2);
if V_N = 0 then V_N = N/(2 * n1 * n2);
T_0 = sqrt(N) * (releff - 0.5 + & delta)/sqrt(V_N);
freiheitsgrad = (sigma_1/n2 + sigma_2/n1) ##2/((sigma_1/n2)##2/(n1 - 1)+ (sigma_2/n1)##2/(n2 - 1));
pvalue_t = 1 - probt(T_0, freiheitsgrad);
quit; % MEND;