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;

data ADDM_wk0;
set libm.ADDM(keep=PATID PE_YN DIS_DEASH HOSP_DAYS PEDIS_DAYS InRsn:);
run;

data ADDM_wk1;
length IhnRsnNM $80.;
set ADDM_wk0(in=a)
ADDM_wk0(in=b where=(Inrsn1=1))
ADDM_wk0(in=c where=(Inrsn2=1))
ADDM_wk0(in=d where=(Inrsn3=1))
ADDM_wk0(in=e where=(Inrsn4=1))
ADDM_wk0(in=f where=(Inrsn5=1))
ADDM_wk0(in=g where=(Inrsn6=1))
ADDM_wk0(in=h where=(Inrsn7=1))
ADDM_wk0(in=i where=(Inrsn8=1))
;
if a then do;InRsn=0;InRSNNM="ALL";end;
if b then do;InRsn=0;InRSNNM="InRsn1";end;
if c then do;InRsn=0;InRSNNM="InRsn2";end;
if d then do;InRsn=0;InRSNNM="InRsn3";end;
if e then do;InRsn=0;InRSNNM="InRsn4";end;
if f then do;InRsn=0;InRSNNM="InRsn5";end;
if g then do;InRsn=0;InRSNNM="InRsn6";end;
if h then do;InRsn=0;InRSNNM="InRsn7";end;
if i then do;InRsn=0;InRSNNM="InRsn8";end;

if InRsn ne .;
drop InRsn1-InRsn8;
run;
data ADDM;
    length InRsnNM $80.;
    set ADDM_wk1(in=a) ADDM_wk1(in=B)
    ;
    if a then do;
        PE_YN=99;
    end;
    _InRsn=0;
    _inRsnNM="ALL";
run;
proc sort data=ADDM; by InRsn InRsnNM dexcending PE_YN;run;

*N;
proc sql;
create table N as 
select distinct InRsn,InrsnNM,PE_YN
,compress(put(count(PATID),cmma20.)) as _COL1 length =200
from ADDM
group by InRsn,InrsnNM, PE_YN;
quit;

*Discharge due to "death";
proc sql;
create table death as select distinct Inrsn,InRsnNM,PE_YN
,compress(put(count(DIS_DEATH),comma20.)) as COL5 length 200
from ADDM
where DIS_DEATH=1
group by InRsn,InRsnNM,PE_YN
order by InRsn,InRsnNM desc ,PE_YN desc;
quit;


*HOSP_DAYS;
proc means data=ADDM nway noprint;
by InRsn InRsnNM PE_YN;
var HOSP_DAYS;
output out=_mean1 n=n1 std=std1 median=median1 min=min1 max=max1 Q1=Q1 Q3=Q3;
run;
*PEDIS_DAYS;
proc means data=ADDM nway noprint;
by InRsn InRsnNM PE_YN;
var PEDIS_DAYS;
output out=_mean1 n=n1 std=std1 median=median1 min=min1 max=max1 Q1=Q1 Q3=Q3;
run;
*正規性の検定:
ods output testsForNormality=NORMT;
proc univariate data=ADDM(where=(HOSP_DAAYS^=.)) normal;
    by InRsn InRsnNM decending PE_YN 
    var HOSP_DAYS;
run;
ods output close;
*データ数が少なくp値が求まらない場合、正規性はないものと設定する。;
data NOMT1;
set NORMT;
if  testLAb='A-SQ';
if pbalue=l. then pvalue=1.e-30;
run;
proc sort data=NOMT1;
by InRsn InRsnNM descending PE_YN;
run;
proc sort data=ADDM;
by InRsn InRsnNM descending PE_YN;
run;
*U-TTESTを実施するデータが施設ごとにあるか、pValue<0.005の数を求める;
proc sql noprint;
    create table NOt2 as select *,count(Inrsn) as NU
    from NOMT1
    group by InRsn, InRsnNM
    order by InRsn, InRsnNM, PE_YN desc;
    quit;
    
run;