/*步骤1：采用proc seqdesign过程进行序贯设计*/

proc seqdesign altref=1.8         /*调用proc seqdesign命令，altref指定两组预期差值为1.8*/
plots=boundary(hscale=samplesize);            /*绘制界值图，并指定横坐标显示样本量*/
design method=obf              /* design语句指定method为obf，即O’Brien-Fleming法*/
alpha=0.05                                         /*指定一类错误概率为0.05*/
beta=0.1                                            /*指定二类错误概率为0.1*/
alt=twosided                                           /*指定检验方式为双侧*/
nstages=4;                                              /*指定分4个阶段实施*/
samplesize model=twosamplemean(stddev=1.5);               /*指定合并标准差为1.5*/
ods output boundary=bound;            /*将界值信息输出到数据集bound，以备后用*/
run;

/*步骤2：数据输入，并根据原数据集产生含1、2、3阶段累积数据的3个数据集*/

data example12_3;
input group stage y;                          
/*group表示组别，1为A药，2为B药；stage表示4个阶段；y表示眼压降低值*/
cards;
1	1	4.96 
1	1	6.00 
1	1	5.71 
1	1	5.04 
2	1	4.24 
2	1	7.10 
2	1	5.61 
2	1	8.45 
1	2	5.86 
1	2	2.26 
1	2	4.55 
1	2	4.40 
2	2	6.80 
2	2	4.58 
2	2	6.71 
2	2	8.73 
1	3	5.73 
1	3	6.33 
1	3	3.32 
1	3	3.68 
2	3	6.41 
2	3	9.81 
2	3	8.44 
2	3	9.70 
1	4	6.03 
1	4	4.29 
1	4	8.20 
2	4	9.54 
2	4	7.50 
2	4	6.64 
;
/*下面3行产生3个数据集，分别为第1、2、3阶段的累积数据*/
data stage1(where=(stage=1)) stage2(where=(stage<=2))  stage3(where=(stage<=3));
set example12_3;
run;

/*步骤3：对第1阶段的数据进行参数估计，并将结果输出到数据集中*/

/*下面4行利用proc reg过程产生组别的参数估计值，并将其输出到数据集parm1*/
proc reg data=stage1;
model y=group;
ods output parameterestimates=parm1;
run;
/*下面7行对参数估计的输出数据集简单整理成proc seqtest过程可用的格式，数据集中新产生两个变量：_stage_和_scale_，分别表示所处的阶段和界值尺度，_stage_直接写相应的阶段数即可，_scale_必须是’stdZ’、’mle’、’score’、’pvalue’其中之一，这里指定为’stdZ’ */
data parm1;
set parm1;
if variable='group';
keep variable estimate stderr _stage_ _scale_;
_stage_=1;
_scale_='mle';
run;

/*步骤4：利用proc seqtest过程导入界值信息与参数估计信息，绘制界值图*/

proc seqtest boundary=bound                    /*导入包含界值信息的数据集*/
parms(testvar=group)=parm1                   /*导入包含参数估计值的数据集*/
nstages=4;                                  /*指定总阶段数*/
ods output test=test1;                         /*输出含第1阶段界值信息的数据集*/
run;

/*步骤5：进入第2阶段继续分析*/

proc reg data=stage2;
model y=group;
ods output parameterestimates=parm2;
run;
data parm12;
set parm2;
if variable='group';
keep variable estimate stderr _stage_ _scale_;
_stage_=2;
_scale_='mle';
run;
proc seqtest boundary=test1                    /*导入包含界值信息的数据集*/
parms(testvar=group)=parm12                   /*导入包含参数估计值的数据集*/
nstages=4;                                  /*指定总阶段数*/
ods output test=test2;                         /*输出含第2阶段界值信息的数据集*/
run;

/*步骤6：进入第3阶段继续分析*/

proc reg data=stage3;
model y=group;
ods output parameterestimates=parm3;
run;
data parm123;
set parm3;
if variable='group';
keep variable estimate stderr _stage_ _scale_;
_stage_=3;
_scale_='mle';
run;

proc seqtest boundary=test2                     /*导入包含界值信息的数据集*/
parms(testvar=group)=parm123                   /*导入包含参数估计值的数据集*/
nstages=4;                                    /*指定总阶段数*/
ods output test=test3;
run;

