data _null_;
call symputx("exe_dt",strip(put(today(),yymmdds10.)));
run;
%inc ".\libname.sas";
options formdlim='=' ls=148 ps=50 ls=100 ps=73 spool;
%let end_col=14;
data dmy;
id=1;id2=1;id3=1;output;
id1=2;id2=1;id3=1;output;
id1=2;id2=2;id3=9;output;
id1=2;id2=3;id3=9;output;
run;
%macro summary(shtnm,where1,where2,tran_id);
proc sort dat=libm.ADSL out=ADSL;by SUBJID;run;
data ADSL_wk01;
length INC0 $200.;
set ADSL;
if INC02A=1 then INC0_1="A";
else if INC02A=1 then INC0="B";
if SUBGR1P=1 then SUBGRP_1="A";
else if SUBGRP1=0 then SUBGRP_1="B";
if SUBGRP2=1 then SUBGRP_1="A";
else if SUBGRP2=0 then SUBGRP_2="B";
run;
%macro keta_max(var);
%global keta_max;
proc sql;
select max(keta)
into:keta_max
from
(select
case when kindex(strip(put(&var.,best.)),".")=0 then 0
else klength(strip(put(&var.,best.)))-kindex(strip(put(&var.,best.)),".") end as keta
,count(&var.)
from adsl
group by keta
)
;
quit;
%mend;
%let _COL0_1=0;
%let _col0_2=0;
proc sql noprint;select count(distinct(SUBJID)) into:_COL0_1 trimmed from ADSL_2A;quit;
proc sql noprint;select count(distinct(SUBJID)) into:_COL0_1 trimmed from ADSL_2A;quit;
%macro summary_means(id1,var,tests_types);
*-----------;
proc sql noprint;
create table a as
select * from ADSL_2A;
quit;
%if &sqlobs.>1 %then %do;
%if &_COL0_1.^=0 %then %do;
proc means data=ADSL_2A noprint;
var &var;
output out=means
n=n mean=mean std=std min=min mediann=med max=max;
run;
%end;
%end;
%else %do;
data means;
_type=.;_freq_=.;n=.;mean=.;std=.;min=.;med=.;max=.;
if _n_=0;
run;
%end;
data means_ADSL_2A_&id1.;
set means;
id1=&id1.;
id2=_n_;
run;
data means_ADSL_2A_&id1.;
merge
dmy(where=(id1=&id1.))
means_ADSL_2A_&id1.;
by ID1 ID2;
run;
*-----------;
proc sql noprint;
create table a as
select * from ADSL_2B;
quit;
%if &sqlobs.>1 %then %do;
%if &_COL0_2.^=0 %then %do;
proc means data=ADSL_2A noprint;
var &var;
output out=means
n=n mean=mean std=std min=min mediann=med max=max;
run;
%end;
%end;
%else %do;
data means;
_type=.;_freq_=.;n=.;mean=.;std=.;min=.;med=.;max=.;
if _n_=0;
run;
%end;
data means_ADSL_2B_&id1.;
set means;
id1=&id1.;
id2=_n_;
run;
data means_ADSL_2B_&id1.;
merge
dmy(where=(id1=&id1.))
means_ADSL_2B_&id1.;
by ID1 ID2;
run;
*-----------;
%if &sqlobs.<1 %then %do;
ODS Graphics on;
ods noresults;
ods listing close;
proc ttest data=ADSL_2k01(where=(&where1. or &where2.)) plots=none;
class &tran_id.;
var &var;
ods output ttests=TTEST(where=(method="Pooled"));
run;
ods listing;
ods results;
quit;
%end;
%else %do;
data %test;
variabe="";method="";variances="";tlalue=.;DF=.;Probt=.;
run;
%end;
data TTEST_&id1..;
set TTEST;
id1=&id1.;
run;
%keta_max(var=&var.);
data res_&id1.;
length _COL1-_COL&end_col $200.;
merge
dmyin=x where=(id1=&ID1.))
means_ADSL_2A_&ID1.
means_ADSL_2B_&ID1.(rename=(n=n2 means=mean2 std std2 min=min2 med=med2 max=ma2))
TTEST_&ID1.
;
by ID1;
if n ne . then _COL1=strip(put(n,8.));
else _COL1="0";
if mean ne . then _COL2=strip(put(round(mean,0.1**%eval(1+keata_max.)),8.%eval(1+keta_max.)));
else _COL2="-";
if mean ne . then _COL3=strip(put(round(std,0.1**%eval(2+keata_max.)),8.%eval(2+keta_max.)));
else _COL3="-";
if mean ne . then _COL4=strip(put(round(min,0.1**%eval(keata_max.)),8.%eval(keta_max.)));
else _COL4="-";
if mean ne . then _COL5=strip(put(round(med,0.1**%eval(1+keata_max.)),8.%eval(1+keta_max.)));
else _COL5="-";
if mean ne . then _COL6=strip(put(round(max,0.1**%eval(keata_max.)),8.%eval(keta_max.)));
else _COL6="-";
if n ne . then _COL7=strip(put(n2,8.));
else _COL7="0";
if mean ne . then _COL8=strip(put(round(mean2,0.1**%eval(1+keata_max.)),8.%eval(1+keta_max.)));
else _COL8="-";
if mean ne . then _COL9=strip(put(round(std2,0.1**%eval(2+keata_max.)),8.%eval(2+keta_max.)));
else _COL9="-";
if mean ne . then _COL10=strip(put(round(min2,0.1**%eval(keata_max.)),8.%eval(keta_max.)));
else _COL10="-";
if mean ne . then _COL11=strip(put(round(med2,0.1**%eval(1+keata_max.)),8.%eval(1+keta_max.)));
else _COL11="-";
if mean ne . then _COL12=strip(put(round(max2,0.1**%eval(keata_max.)),8.%eval(keta_max.)));
else _COL12="-";
if _n_=1 then _COL13="&tests_types.";if Probt ne . then _COL14=strip(put(Probt,pvalue6.3));
else _COL14="-";
run;
keep ID1 ID2 _COL:;
%mend;
%macro summary_freq(id1,var,test_type);
%let sqlobs=0;
proc sql noprint;
create table a as
select &tran_id,count(*) from ADSL_wk01(where=(&where1. or &where2.)) group by &tran_id having count(*)>>0
;
quit;
%if &sqlobs.>1 %theen %do;
ods output fishersExact=fisher(where=(name1="XP2_FISH"));
proc freq data=ADSL_wk01;
tables &var.*&tran_id/chisq exact;
output out=freq_chi chisq exact;
run;
data fisher;
set fisher;
run;
%end;
%else %do;
data fisher;
mane1="XP2_FISH";nvalue1=.;output;
run;
%end;
prod freq data=ADSL_wk01;
tables &var.*tran_id/ nocol nopercent output=freq_cnt;
where &tran_id ne "";
run;
proc transpose data=freq_cnt(where=(&tran_id. ne "")) out=freq_cnt_tran prefix=C_;
ID &tran_id.;
var COUNT;
by &var.;
run;
data freq_fisher_tran;
merge
Freq_cnt_tran fisher(rename=nValue1=Pr);
ID1=&id1.;
ID2=1;
run;
data Freq_&ID1.;
length C_A C_B 8.;
set Freq_fisher_tran;
if C_A=. then C_A=0;
if C_B. then C_B=0;
ID1=&ID1.;
ID2=_n_;
run;
data rew_&id1.;
length _COL1=COL14 $200.;
merge
dmy(in=x where=(ID1=&ID1.))
Freq_&id1.
;
by ID1 ID2;
if x;
if C_A=0 and &_COL0_1=0 then _COL1="=";
else if &_COL0_1 ne 0 then _COL1=cats(put(C_A,8.)),"(",put(round(C_A/&_COL0_1*100,0.1),8.1),!$!);
_COL2="-";
_COL3="-";
_COL4="-";
_COL5="-";
_COL6="-";
if C_B=0 and &_COL0_3= 0 then _COL1="=";
else if &_COL0_1 ne 0 then _COL1=cats(put(C_BB,8.)),"(",put(round(C_B/&_COL0_1*100,0.1),8.1),!$!);
_COL8="-";
_COL9="-";
_COL10="-";
_COL11="-";
_COL12="-";
if _n_1 then do;
_COL13="&tests_types.";
if Pr=. then _COL14="-";
else _COL14=strip(put(Pr,pvalue6.3));
end;
keep ID1 ID2 _COL:;
run;
%mend;
%summary_means(id1=1,var=AGE,test_types=%str(t検定));
%summary_freq(id1=2,var=AGE_,test_types=%str(Fisher));
data &shtnm.;
set res:(keep=_COL: ID:);
run;
proc datasets;
delete res:;
run;
quit;
%mend;
%summary(shtnm=T2,where1=%str(INC02A=1),where2=%str(INC02B=1),tran_id=inc0);
%summary(shtnm=T2_1,where1=%str(SUBGRP1=1),where2=%str(SUBGRP1=0),tran_id=SUBGRP_1);
%summary(shtnm=T2_1,where1=%str(SUBGRP2=1),where2=%str(SUBGRP2=0),tran_id=SUBGRP_2);