*************************************************;
*--- 3.6節 生存時間解析 ;
data MYDATA ;
set QOL ;
where GROUP ne "C" ;
run ;
ods graphics on ;
proc lifetest data=MYDATA plots=(s) ;
time DAY * EVENT(2) ; * 観察期間*イベントの有無を表す変数 ;
strata GROUP ; * 群を表す変数 ;
run;
ods graphics off ;
proc lifetest data=MYDATA ;
time DAY * EVENT(2) ; * 観察期間*イベントの有無を表す変数 ;
strata GROUP ; * 群を表す変数 ;
run;
proc phreg data=MYDATA;
class GROUP ;
model DAY * EVENT(2) = GROUP / ties=exact;
run ;
proc phreg data=MYDATA;
class GROUP ;
model DAY * EVENT(2) = GROUP / ties=exact ;
hazardratio GROUP / cl=wald ;
run ;
proc phreg data=MYDATA;
model DAY * EVENT(2) = DURATION / ties=exact;
run ;
proc phreg data=MYDATA;
class GROUP PREDRUG ;
model DAY * EVENT(2) = GROUP PREDRUG / ties=exact;
run ;
proc phreg data=MYDATA;
class GROUP ;
model DAY * EVENT(2) = GROUP DURATION / ties=exact;
run ;
proc sort data=MYDATA ;
by PREDRUG ;
run ;
proc phreg data=MYDATA;
by PREDRUG ;
class GROUP ;
model DAY * EVENT(2) = GROUP / ties=exact;
run ;
proc phreg data=MYDATA ;
class GROUP PREDRUG ;
model DAY * EVENT(2) = GROUP PREDRUG GROUP*PREDRUG ;
run ;
proc phreg data=MYDATA;
class GROUP ;
model DAY * EVENT(2) = GROUP DURATION GROUP*DURATION / ties=exact;
run ;
data QOL2 ;
input ID GROUP $ EVENT START END DIFF STRATUM ;
cards ;
1 A 1 0 1 1 1
1 A 1 1 2 1 2
1 A 2 2 4 2 3
2 A 1 0 6 6 1
2 A 1 6 8 2 2
3 B 2 0 3 3 1
4 B 1 0 5 5 1
4 B 2 5 7 2 2
5 B 1 0 9 9 1
;
run ;
data IN ;
GROUP="A" ; output;
GROUP="B" ; output;
run;
proc phreg data=QOL2 covs(aggregate) ;
by GROUP ;
class GROUP ;
model (START,END)*EVENT(2) = GROUP ;
baseline covariates=IN out=OUT cmf=_all_ ;
id ID ;
run;
proc print data=OUT ;
run ;
proc phreg data=QOL2 covs(aggregate) ;
class GROUP ;
model (START,END)*EVENT(2) = GROUP ;
id ID ;
run ;
proc phreg data=QOL2 covs(aggregate) ;
class GROUP ;
model (START,END)*EVENT(2) = GROUP ;
strata STRATUM ;
id ID ;
run ;
proc phreg data=QOL2 covs(aggregate) ;
class GROUP ;
model DIFF*EVENT(2) = GROUP ;
strata STRATUM ;
id ID ;
run ;
proc phreg data=QOL2 covs(aggregate) ;
class GROUP ;
model END*EVENT(2) = GROUP ;
strata STRATUM ;
id ID ;
run ;
data QOL3 ;
input ID GROUP $ EVENT END STRATUM ;
cards ;
1 A 1 1 1
1 A 1 2 2
1 A 2 4 3
2 A 1 6 1
2 A 1 8 2
2 A 2 8 3
3 B 2 3 1
3 B 2 3 2
3 B 2 3 3
4 B 1 5 1
4 B 2 7 2
4 B 2 7 3
5 B 1 9 1
5 B 2 9 2
5 B 2 9 3
;
run ;
proc phreg data=QOL3 covs(aggregate) ;
class GROUP ;
model END*EVENT(2) = GROUP ;
strata STRATUM ;
id ID ;
run ;
ods graphics on ;
proc lifetest data=MYDATA plots=(s,lls) ;
time DAY * EVENT(2) ;
strata GROUP ;
run;
ods graphics off ;
proc phreg data=MYDATA;
class GROUP ;
model DAY * EVENT(2) = GROUP / ties=exact;
output out=OUT ressch=SCHOENFELD ;
run ;
proc corr data=OUT ;
var DAY SCHOENFELD ;
run ;
data QOL4 ;
input ID GROUP $ COUNT TIME ;
LOGT = log(TIME) ;
cards ;
1 A 2 4
2 A 2 8
3 B 0 3
4 B 1 7
5 B 1 9
;
run ;
proc genmod data=QOL4 ;
class GROUP ;
model COUNT=GROUP / link=log dist=poisson offset=LOGT ;
run ;
ods graphics on ;
proc phreg data=MYDATA ;
class GROUP ;
model DAY * EVENT(2) = GROUP ;
bayes seed=777 ;
run ;
ods graphics off ;
quit ;
*************************************************;
*--- 3.7節 3つ以上の薬剤間の比較 ;
data MYDATA ;
set QOL ;
run ;
proc format ;
value EVENTF 1="Yes" 2="No" ;
run ;
title "棒グラフ(平均値±標準偏差)" ;
proc sgplot data=MYDATA ;
hbar GROUP / response=QOL stat=mean ;
dot GROUP / response=QOL stat=mean numstd=1
limitstat=stddev limits=upper ;
run ;
title "棒グラフ(平均値±標準偏差)" ;
proc sgpanel data=MYDATA ;
panelby PREDRUG / rows=1 columns=2 ;
vbar GROUP / response=QOL stat=mean numstd=1
limitstat=stddev limits=upper ;
format EVENT EVENTF. ;
run ;
title "箱ひげ図" ;
proc sgplot data=MYDATA ;
hbox QOL / category=GROUP ;
run ;
title "箱ひげ図" ;
proc sgpanel data=MYDATA ;
panelby PREDRUG / rows=1 columns=2 ;
vbox QOL / category=GROUP ;
run ;
title "棒グラフ(改善の有無)" ;
proc sgplot data=MYDATA ;
hbar GROUP / GROUP=EVENT ;
format EVENT EVENTF. ;
run ;
ods output CrossTabFreqs=OUT1(where=(GROUP ne "" and EVENT ne .)) ;
proc freq data=mydata ;
table GROUP*EVENT / nopercent nocol ;
run ;
ods output close ;
title "棒グラフ(改善の有無)" ;
proc sgplot data=OUT1 ;
hbar GROUP / GROUP=EVENT freq=ROWPERCENT ;
format EVENT EVENTF. ;
run ;
ods output CrossTabFreqs=OUT2(where=(GROUP ne "" and EVENT ne .)) ;
proc freq data=mydata ;
table PREDRUG*GROUP*EVENT / nopercent nocol ;
run ;
ods output close ;
title "棒グラフ(改善の有無)" ;
proc sgpanel data=OUT2 ;
panelby PREDRUG / rows=1 columns=2 ;
vbar GROUP / GROUP=EVENT freq=ROWPERCENT ;
format EVENT EVENTF. ;
run ;
title "";
proc means data=MYDATA nonobs n mean stddev min max fw=4;
class GROUP ;
var QOL ;
run ;
proc means data=MYDATA nonobs n mean stddev min max fw=4;
class PREDRUG GROUP ;
var QOL ;
run ;
proc freq data=MYDATA ;
table GROUP*EVENT / nopercent nocol ;
format EVENT EVENTF. ;
run ;
proc freq data=MYDATA ;
table PREDRUG*GROUP*EVENT / nopercent nocol ;
format EVENT EVENTF. ;
run ;
proc glm data=MYDATA ;
class GROUP ;
model QOL = GROUP / ss3 ;
run ;
proc freq data=MYDATA ;
table GROUP*QOL / nopercent nocol cmh2 scores=rank ;
run ;
proc freq data=MYDATA ;
table GROUP*EVENT / nopercent nocol chisq ;
format EVENT EVENTF. ;
run ;
proc ttest data=MYDATA ;
where GROUP in ("A","B") ; class GROUP ; var QOL ;
proc ttest data=MYDATA ;
where GROUP in ("A","C") ; class GROUP ; var QOL ;
proc ttest data=MYDATA ;
where GROUP in ("B","C") ; class GROUP ; var QOL ;
run ;
proc freq data=MYDATA ;
where GROUP in ("A","B") ; tables GROUP*EVENT / chisq ;
proc freq data=MYDATA ;
where GROUP in ("A","C") ; tables GROUP*EVENT / chisq ;
proc freq data=MYDATA ;
where GROUP in ("B","C") ; tables GROUP*EVENT / chisq ;
run ;
proc mixed data=MYDATA ;
class GROUP ;
model QOL = GROUP / solution noint ;
estimate "対比検定" GROUP 1 0 -1 / e ;
run ;
proc logistic data=MYDATA order=internal ;
class GROUP EVENT / param=glm ;
model EVENT = GROUP / noint expb ;
contrast "対比検定" GROUP 1 0 -1 / e ;
format EVENT EVENTF. ;
run ;
proc freq data=MYDATA ;
table GROUP*EVENT / trend ;
format EVENT EVENTF. ;
run ;
proc mixed data=MYDATA ;
class GROUP ;
model QOL = GROUP / solution ;
estimate "対比検定" GROUP 2 -1 -1 / e ;
estimate "対比検定" GROUP 1 0 -1 / e ;
run ;
proc mixed data=MYDATA ;
class GROUP ;
model QOL = GROUP / solution ;
estimate "対比検定" INT 0
GROUP 1 0 -1 / e ;
run ;
proc mixed data=MYDATA ;
class GROUP ;
model QOL = GROUP / solution ;
estimate "対比検定" GROUP 1 0 -1 / e ;
run ;
proc phreg data=MYDATA;
class GROUP ;
model DAY * EVENT(2) = GROUP / ties=exact;
contrast "対比検定" GROUP 1 -1 / e ;
run ;
proc mixed data=MYDATA ;
class GROUP PREDRUG ;
model QOL = GROUP*PREDRUG / solution noint ;
estimate "前治療なしの層"
GROUP*PREDRUG 1 0 1 0 -2 0 / e ;
run ;
proc logistic data=MYDATA order=internal ;
class GROUP EVENT PREDRUG / param=glm ;
model EVENT = GROUP*PREDRUG / noint expb ;
contrast "前治療なしの層"
GROUP*PREDRUG 1 0 1 0 -2 0 / e ;
format EVENT EVENTF. ;
run ;
proc mixed data=MYDATA ;
class GROUP PREDRUG ;
model QOL = GROUP*PREDRUG / solution noint ;
estimate "前治療なしの層"
GROUP*PREDRUG 1 0 1 0 -2 0 / divisor=2 ;
run ;
proc logistic data=MYDATA order=data ;
class GROUP EVENT PREDRUG / param=glm ;
model EVENT = GROUP*PREDRUG / noint expb ;
contrast "対数オッズ比に関する傾向性検定"
GROUP*PREDRUG 1 -1 1 -1 -2 2 / e ;
run ;
proc mixed data=MYDATA ;
class GROUP ;
model QOL = GROUP / solution ;
lsmeans GROUP / diff=control("C") ;
run ;
proc mixed data=MYDATA ;
class GROUP ;
model QOL = GROUP / solution noint ;
estimate "A vs C" GROUP 1 0 -1 ;
estimate "B vs C" GROUP 0 1 -1 ;
run ;
data PVALUE ;
input TEST $ RAW_P ;
cards ;
AvsC 0.0006
BvsC 0.1794
;
run ;
proc multtest pdata=PVALUE bon sid out=OUTDATA ;
run ;
proc print data=OUTDATA ;
run ;
data _null_;
call symput('bon_a', 0.05/2 );
call symput('sid_a', 1-(1-0.05)**(1/2));
run ;
proc mixed data=MYDATA ;
class GROUP ;
model QOL = GROUP / solution ;
lsmeans GROUP / diff=control("C") alpha=&bon_a. cl ;
run ;
proc mixed data=MYDATA ;
class GROUP ;
model QOL = GROUP / solution ;
lsmeans GROUP / diff=control("C") adjust=bon cl ;
run ;
proc mixed data=MYDATA ;
class GROUP ;
model QOL = GROUP / solution ;
lsmeans GROUP / diff=control("C") adjust=dunnett cl ;
run ;
proc mixed data=MYDATA ;
class GROUP ;
model QOL = GROUP / solution ;
lsmeans GROUP / adjust=tukey cl ;
run ;
quit ;
ods graphics on ;
proc seqdesign plots=all ;
Pocock1: design method=poc nstages=4 alpha=0.025 alt=upper ;
run ;
ods graphics off ;
data alpha ;
alpha = 1-probnorm(2.36129) ;
proc print;
run ;
proc seqdesign boundaryscale=pvalue ;
Pocock1: design method=poc nstages=4 alpha=0.025 alt=upper ;
run ;
ods graphics on ;
proc seqdesign plots=all ;
OBrienFleming1: design method=obf nstages=4 alpha=0.025 alt=upper ;
run;
ods graphics off ;
ods graphics on ;
proc seqdesign plots=all ;
Pocock2: design method=poc nstages=4 alpha=0.025 alt=lower ;
OBrienFleming2: design method=obf nstages=4 alpha=0.025 alt=lower ;
Pocock3: design method=poc nstages=4 alpha=0.025 ;
OBrienFleming3: design method=obf nstages=4 alpha=0.025 ;
run;
ods graphics off ;
ods graphics on ;
proc seqdesign plots=all errspend ;
Pocock: design method=errfuncpoc nstages=4 info=cum(0.2,0.5,0.8,1.0) alpha=0.025 alt=upper ;
OBrienFleming: design method=errfuncobf nstages=4 info=cum(0.2,0.5,0.8,1.0) alpha=0.025 alt=upper ;
run;
ods graphics off ;
*================================================;
*--- 3.8節 例数設計 ;
proc power;
onesamplemeans
mean = 3
stddev = 4
alpha = 0.05
power = 0.8
ntotal = . ;
run ;
proc power;
onesamplemeans
mean = 3
stddev = 4
alpha = 0.05
power = .
ntotal = 20 ;
run ;
proc power;
pairedmeans
test = diff
meandiff = 3
stddev = 4
alpha = 0.05
corr = 0.6
power = 0.8
npairs = . ;
run ;
proc power ;
twosamplemeans
test = diff
meandiff = 3
stddev = 4
alpha = 0.05
power = 0.8
ntotal = . ;
run ;
proc power ;
twosamplemeans
test = diff
meandiff = 3
stddev = 4
alpha = 0.05
power = 0.8
npergroup = . ;
run ;
proc power ;
twosamplemeans
test = diff
alpha = 0.025
sides = u
groupmeans = (2,3)
groupweights = (1,2)
nulldiff = -1
stddev = 4
power = 0.8
ntotal = . ;
run ;
proc power;
onesamplefreq
test = z
method = normal
alpha = 0.05
nullproportion = 0.1
proportion = 0.2
power = 0.8
ntotal = . ;
run ;
proc power;
twosamplefreq
test = pchi
alpha = 0.05
groupproportions = (0.1 0.2)
nullproportiondiff = 0.00
power = 0.8
npergroup = . ;
run ;
proc power ;
twosamplefreq
test = pchi
alpha = 0.025
sides = u
groupproportions = (0.1 0.2)
nullproportiondiff = -0.1
groupweights = (1,2)
power = 0.8
ntotal = . ;
run ;
proc power;
twosamplesurvival
test = logrank
alpha = 0.05
curve("薬剤A") = (2):(0.9)
curve("薬剤B") = (2):(0.8)
groupsurvival = "薬剤A" | "薬剤B"
accrualtime = 0.001
followuptime = 5
power = 0.8
ntotal = . ;
run ;
proc power;
twosamplesurvival
test = logrank
alpha = 0.05
groupsurvexphazards = (0.05268 0.11157)
accrualtime = 0.001
followuptime = 5
power = 0.8
ntotal = . ;
run ;
proc power;
onewayanova
test = contrast
alpha = 0.05
groupmeans = 0 | 10 | 20 | 30
stddev = 25
power = 0.8
contrast = (-3 -1 1 3)
ntotal = . ;
run ;
proc power;
onewayanova
test = contrast
alpha = 0.05
groupmeans = 0 | 10 | 20 | 30
groupweights = (1 2 2 2)
stddev = 25
power = 0.8
contrast = (-3 -1 1 3)
ntotal = . ;
run ;
ods output OUTPUT=MYSAMPLESIZE ;
proc power ;
twosamplemeans
test = diff
meandiff = 1 2 3
stddev = 4 5 6
alpha = 0.05
power = 0.8 0.9
npergroup = . ;
run ;
ods output close ;