• No results found

Libname Trude 'm:\My SAS Files';

option nonotes;

data str_ett;

set Trude.asakoapro; *Tar ett dataset med propensity scores;

by sjukhus; *för acetylsalicylsyrabara eller;

if first. sjukhus then n=1; *antikoagulantia som utskrivnings-;

else n+1; *medicin och nummrerar observationerna; i=1; *inom sjukhus, i skapas enbart för proc;

run; *proc multtest;

data Trude.STR; *skapar ett tomt dataset som ska fyllas;

*på. Blir här bara en tom rad; /***********************************/

/******* drar stickprov ************/ /***********************************/

%macro str2(repl);

%do i=1 %to &repl; *när macrot anropas anges hur många;

*gånger do-satsen ska köras;

proc multtest data=str_ett noprint nocenter outsamp=str_tva

nsample=1 bootstrap; *med proc multtest och valet bootstrap;

by sjukhus; *dras ett st.pr med återläggning från;

class n; *varje sjukhus,n:en dras;

test mean(i); *proc multtest kräver att ett test;

run; *genomförs;

data str_tva; *n:en som dras får i det nya st.pr.;

set str_tva; *namnet _obs_,här får de namnet n igen;

rename _obs_=n; run;

proc sort data=str_tva; *det dragna st.pr. sorteras efter n inom;

by sjukhus n; *varje sjukhus;

run;

data str_tre; *och slås samman med ett dataset som;

merge str_tva Trude.a; *innehåller alla oberoende variabler;

by sjukhus n; *de matchas efter sjukhus och n; if _sample_=. then delete;

run;

proc sort data=str_tre; *sorterar det sammanslagna datasetet;

by sjukhus n; *efter n inom varje sjukhus;

run;

proc logistic descending data=str_tre noprint;

model asakoany=alder kon a0cirk dm hyperton smoker tinfarkt tptcabg2 aacei aantiary aantiko2 aasa2 abetabl2 acah adigital adiureti alipids anitro sviktar kom_stro kom_njur kom_kol kom_deme kom_canc kom_hsvi;

output out=pred_asa p=phat_asa;*med proc logistic beräknas;

*sannolikheten att få behandling;

run; *beroende av vilket värde de oberoende;

proc means data=pred_asa noprint;*variablerna har;

var phat_asa asakoany; *sannolikheter & även;

output out=str2_asa sum=sphat_asa sasak n=n;*behandlingsvariabeln;

run; *så att O & E erhållshär får de namnen;

*sphat_asa och sasak;

data str2_asa2;

set str2_asa(keep=sjukhus sasak sphat_asa n);

run; *behåller önskade variabler:sjukhus,O&E;

proc sort data=str2_asa2; *sorterar detta dataset efter sjukhus;

by sjukhus; run;

proc logistic descending data=str_tre noprint;

model uaceiny=alder kon a0cirk dm hyperton smoker tinfarkt tptcabg2 aacei

aantiary aantiko2 aasa2 abetabl2 acah adigital adiureti alipids anitro sviktar kom_stro kom_njur kom_kol kom_deme kom_canc kom_hsvi;

output out=pred_uac p=phat_uac; run;

*gör här samma sak för ACE-hämmare;

proc means data=pred_uac noprint; By sjukhus;

var phat_uac uaceiny;

output out=str2_uac sum=sphat_uac suacei n=n; run;

data str2_uac2;

set str2_uac(keep=sjukhus suacei sphat_uac n); run;

proc sort data=str2_uac2; by sjukhus;

run;

proc logistic descending data=str_tre noprint;

model ibetabl2ny=alder kon a0cirk dm hyperton smoker tinfarkt tptcabg2 aacei aantiary aantiko2 aasa2 abetabl2 acah adigital adiureti alipids anitro sviktar kom_stro kom_njur kom_kol kom_deme kom_canc kom_hsvi;

output out=pred_ibe p=phat_ibe; run;

*och för intravenös beta-blockerare;

proc means data=pred_ibe noprint; By sjukhus;

var phat_ibe ibetabl2ny;

output out=str2_ibe sum=sphat_ibe sibeta n=n; run;

data str2_ibe2;

set str2_ibe(keep=sjukhus sibeta sphat_ibe n); run;

proc sort data=str2_ibe2; by sjukhus;

run;

data str_ihop;

Z_uac=log(suacei/sphat_uac); *för varje beh.och sjukhus;

Z_ibe=log(sibeta/sphat_ibe); run;

data Trude.STR;

set Trude.STR str_ihop; *allt matas in i Trude.STR;

run;

%end; *slut på do-satsen;

%mend; *slut på macrot;

%str2(10000); *macrot anropas 10000 gånger;

proc sort data=STR(where=(sjukhus ne .));

by sjukhus; *tar bort tomma raden från Trude.STR;

run; *och sorterarefter sjukhus;

data konf_str2_asa; *spar sjukhus och Z för resp. beh.i;

se

run; t Trude.STR(keep= sjukhus Z_asa);*för att ta fram konf.interv.;*varsitt data set;

data konf_str2_uac;

set Trude.STR(keep= sjukhus Z_uac);

run;

data konf_str2_ibe;

set Trude.STR(keep= sjukhus Z_ibe);

run;

/**********************************************/ /********* tar fram std av STR ****************/ /**********************************************/

proc means data=Trude.STR noprint;*beräknar mha proc means std.avvikelsen;

by sjukhus; *för ln(STR)=Z för varje beh. och;

var Z_asa Z_uac Z_ibe; *inom sjukhus;

ou

run; tput out=Trude.std_STR std=std_asa std_uac std_ibe;

*vill nu ta fram den beräknade variansen på originalst.pr.;

data var_asa;

set Trude.asakoapro; *här acetyl.;

va

run; rians=phat*(1-phat);

proc means data=var_asa noprint;

by sjukhus; *summerar ovanstående varians för att få;

var varians phat; *Var[O] & alla prop.scores för att få E;

ou

run; tput out=var_asa2 sum=svar sphat;

data var_asa3;

set var_asa2;

std_asa_org=sqrt((1/(sphat**2))*svar);

run; *detta är formeln för Var[ln(STR)];

data var_ibe;

set Trude.ibetablpro; *gör samma sak för intrav. beta-bl.;

varians=phat*(1-phat);

proc means data=var_ibe noprint;

by sjukhus;

var varians phat;

output out=var_ibe2 sum=svar sphat;

run;

data var_ibe3;

set var_ibe2; st

run; d_ibe_org=sqrt((1/(sphat**2))*svar);

data var_uac;

set Trude.uaceipro; *och för ACE-hämmare;

varians=phat*(1-phat);

run;

proc means data=var_uac noprint;

by sjukhus;

var varians phat;

output out=var_uac2 sum=svar sphat;

run;

data var_uac3;

set var_uac2;

std_uac_org=sqrt((1/(sphat**2))*svar);

run;

data Trude.tempvarZ;

merge var_asa3(keep=sjukhus std_asa_org) var_ibe3(keep=sjukhus

std_ibe_org)

var_uac3(keep=sjukhus std_uac_org);

by sjukhus; *behåller det intressanta och slår ihop;

run; *alla beräknade std för de olika beh.;

data Trude.str2; *slår ihop datasetet med bootstrapstd;

merge Trude.std_STR(drop= _type_ _freq_) Trude.tempvarz;

by

run; sjukhus; *enligt formel.;*och datasetet med varianserna beräknade; /****************************************/

/***** tar fram bootstrapintervall ******/ /****************************************/

proc sort data=konf_str2_uac; *Tar datasetet med de 10000 Z-värdena;

by sjukhus Z_uac; *och sorterar efter Z inom varje sjukhus;

run; *här beh uacei=ACE-hämmare.;

data konf1;

set konf_str2_uac;

by sjukhus; *numrerar Z inom sjukhus;

if first. sjukhus then n=1;

else n+1; pa

run; ssa=1; *passa används senare;

data konf2;

set konf1 end=final; *Tar här fram en variabel som är;

if n=1 then count+1; *antal sjukhus och en som är;

if

set konf2(keep=antsj antboot);

passa=1; *får här en rad med antsj antboot och;

if

run; antsj ne . then output; *och passa;

data konf4(drop=passa); *slår ihop de numrerade Z:na med antsj;

merge konf1 konf3; *och antboot;

by passa;

run;

data konf5;

set ko f4n ;

ajust=1-(0.95)**(1/antsj); *det bonferroni korrigerade alfat;

a=0.05;

aaa=antboot*(ajust/2); *tar fram den nedre gränsen i intervallet;

if n=round(aaa,1.0) then output;*rundar av lite;

rename Z_uac=lowerz; *döper om det Z som utgör den nedre gränsen;

run;

data konf6;

set ko f4n ;

ajust=1-(0.95)**(1/antsj); a=0.05;

aa=antboot*(1-(ajust/2)); *Tar här fram den övre gränsen;

if n=round(aa,1.0)+1 then output;

rename Z_uac=upperz;

run;

data konf7; *slår ihop dataseten innehållandes;

merge konf5 konf6; *nedre och övre gräns;

by sjukhus;

run;

data konf8; *behåller det intressanta;

set konf7(keep=sjukhus lowerz upperz);

run;

proc means data=Trude.STR noprint;

by sjukhus; *tar fram medelvärdet av Z=ln(STR) från;

var Z_asa Z_uac Z_ibe; *bootstrap-stickproven inom varje sjukhus;

output out=y mean= mean_asa mean_uac mean_ibe;

run;

data konf9;

merge konf8 y(keep=sjukhus mean_uac);

by sjukhus; *slår ihop datasetet med övre & nedre gräns;

run; *med datasetet innehållandes medelvärdet;

data trude.konf_str2_uac;

set konf9;

rename lowerz=b_lowerz; *döper om så jag ska veta att det är boot

gränser;

rename mean_uac=b_mean;

re

run; name upperz=b_upperz;

/********************************************/ /** tar fram konf.intervall på org.st.pr. ***/ /********************************************/

set Trude.uacei(drop=_type_ _freq_); *För beh uacei=ACE-hämmare;

Z=

run; log(suacei/e_uacei); *Tar fram Z=STR;

data konfstr;

merge Trude.tempvarz(keep=sjukhus std_uac_org) plotz2;

by sjukhus;

var_uac=std_uac_org**2; *Lägger till variansen;

run;

data konfstr2;

set konfstr;

lowerz=z-(3.169*sqrt(var_uac)); *Tar fram nedre och;

upperz=z+(3.169*sqrt(var_uac)); *övre gräns;

run;

data Trude.konfstr; *har nu ett dataset med Z,nedre,;

se

run; *&övre gräns för Z från originalst.pr.;

t konfstr2(drop=var_uac e_uacei suacei std_uac_org);

/****************************************/ /********* tar fram std för Ojt *********/ /****************************************/

proc means data=Trude.STR noprint;

by sjukhus;

var sasak suacei sibeta; *tar fram std för Ojt* för varje;

output out=std_O std=std_O_asa std_O_uac std_O_ibe;

run; *beh. inom sjukhus;

data varo_uacei1; *i Trude.uaceipro finns prop score;

set Trude.uaceipro; *för alla obs. för ACE-hämmare;

var_uac=phat*(1-phat); *tar här fram variansen för varje obs.;

run;

proc means data=varo_uacei1 noprint;

by sjukhus;

var var_uac; *summerar varianserna för att få Var[Ojt];

ou

run; tput out=varo_uacei2 sum=varo_uac;

data varo_uacei3;

set varo_uacei2;

std_O_uac_org=sqrt(varo_uac); *tar fram std;

run;

data Trude.jmfvouac;

merge varo_uacei3(keep=sjukhus varo_uac) std_O(keep=sjukhus std_O_uac);

by

run; sjukhus; *slår ihop bootstd med beräknad;

/******************************************/ /******** tar fram std för Ejt ************/ /******************************************/

output out=std_E std=std_asa std_ibe std_uac;

run; *tar fram std för E=sphat inom varje sjukhus;

/******************************************/ /********* tar fram kovariansen ***********/ /******************************************/

data p;

set Trude.STR; *plockar ut 20 sjukhus;

if sjukhus=1 or sjukhus=3 or sjukhus=10 or sjukhus=14 or sjukhus=20 or sjukhus=25 or sjukhus=31 or sjukhus=35 or sjukhus=39 or sjukhus=40 or sjukhus=41 or sjukhus=46 or sjukhus=51 or sjukhus=53 or sjukhus=54 or sjukhus=59 or sjukhus=64 or sjukhus=70 or sjukhus=74 or sjukhus=77;

run;

proc corr cov data=p outp=E;

by sjukhus; *tar fram kovariansen mellan;

var suacei sphat_uac; *O & E inom sjukhus.Här för;

run; *beh. uacei=ACE-hämmare;

data W;

set E(drop=e); *fix och trix för att enbart;

if _type_='COV' and _name_='e'; *behålla kovariansen;

rename o=cov;

run;

data Trude.cov_uac;

set W(keep=sjukhus cov);

Related documents