Skip to content

Instantly share code, notes, and snippets.

@SALTARAIHI

SALTARAIHI/1 SAS Secret

Last active February 15, 2023 19:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SALTARAIHI/1882f2d18ec9915c2f1588953cbb5a5b to your computer and use it in GitHub Desktop.
Save SALTARAIHI/1882f2d18ec9915c2f1588953cbb5a5b to your computer and use it in GitHub Desktop.
Scripts used for: "Treatment with prophylactic oral anticoagulants and the risk of mortality in COVID-19 patients." Altaraihi et al.
/*merger med covid fil, således at diagnoser efter covid positiv dato fjernes.*/
data data1;
set in05614.lpr3_SB_kontakt;
run;
proc sort data=data1;
by personnummer_encrypted;
run;
data data2;
set perm.covidpositive;
run;
Data data3;
set data2;
rename CPR_ENCRYPTED=personnummer_encrypted;
run;
data data4;
merge data3 data1;
by personnummer_encrypted;
run;
data d5;
set data4;
STARTTIDSPUNKT = datepart(starttidspunkt);
format STARTTIDSPUNKT DATE7.;
if Covid_samp_date<starttidspunkt then delete;
run;
data perm.d6; set d5;
rename Aktionsdiagnose=P1 personnummer_encrypted=cpr_encrypted;
run;
/*laver filsæt med cancerdiagnoser som skal ekskluderes.*/
data lpr3_eks; set d6; Cancer=0;
array p {3} p1-p3; /* q-diagn. (lpr2)*/
do i = 1 to 3;
if 'C00'<=substr(p(i),2,3)<='C26' OR 'C30'<=substr(p(i),2,3)<='C34' OR 'C37'<=substr(p(i),2,3)<='C41' OR 'C45'<=substr(p(i),2,3)<='C58' OR 'C60'<=substr(p(i),2,3)<='C76' OR 'C81'<=substr(p(i),2,3)<='C85' OR 'C90'<=substr(p(i),2,3)<='C97' OR 'C77'<=substr(p(i),2,3)<='C80' OR substr(p(i),2,3) in ('C43', 'C88') then Cancer=1;
drop i;
end;
run;
data cancer_eks_3; cancerslet3=0;
set lpr3_eks;
if cancer=1 then do cancerslet3=1; end;
run;
data cancer_eks_lpr3; Keep Cancerslet3 Cpr_encrypted;
set Cancer_eks_3;
run;
proc sql;
create table perm.cancer_eks_lpr3_rigtig as select cpr_encrypted, (max (cancerslet3)) as cancerslet3 from cancer_eks_lpr3 group by cpr_encrypted;
quit;
proc freq data=perm.cancer_eks_lpr3_rigtig;
tables cancerslet3;
run;
/*4052 der skal fjernes*/
proc sort data=perm.cancer_eks_lpr3_rigtig;
by cpr_encrypted;
run:
/* dette datasæt bliver merget ved inddeling af diagnoser helt tilsidst (anden fil)*/
/*gør datasæt klar til senere merge*/
data data5 (keep=kontakt_id personnummer_encrypted aktionsdiagnose);
set d5;
run;
/*sorterer LPR3 diganose ved kontakt id*/
data LPR3_diagnose;
set in05614.lpr3_SB_diagnose;
run;
Proc sort data=LPR3_diagnose;
by kontakt_id;
run;
/*eksluderer "sideangivelse"(alle), fejl, fejlkontakt, og senere afkræftet (her tages hensyn til, hvis ja)*/
data Lpr3_diag1;
set lpr3_diagnose;
drop sideangivelse;
run;
data lpr3_diag2;
set lpr3_diag1;
if senereafkraeftet=0 then output;
drop senereafkraeftet;
run;
data lpr3_diag3;
set lpr3_diag2;
if fejl=0 then output;
drop fejl;
run;
data lpr3_diag4;
set lpr3_diag3;
if fejl_kontakt=0 then output;
drop fejl_kontakt;
run;
*laver datasæt vandret med hhv A (ALGA01) og B (ALGA02) diagnoser;
data lpr3diag_a; set LPR3_diag4;
where art = "ALGA01";
a = kode;
run;
data lpr3diag_b; set lpr3_diag4;
where art = "ALGA02";
b = kode;
run;
/* A + B har flere koder per kontakt - tæl disse */
*Sarah: A - i dette datasæt findes op til 1 a diag pr kontakt_id;
proc sort data=lpr3diag_a;
by kontakt_id;
run;
data lpr3sbd_atael; set LPR3diag_a;
by kontakt_id;
if first.kontakt_id then diag_count= 0;
diag_count+1;
run;
proc freq data=lpr3sbd_atael;
tables diag_count;
title a-diag;
run;
*Sarah: i B - i dette sæt findes op til 24 b diag pr kontakt_id;
proc sort data=lpr3diag_b;
by kontakt_id;
run;
data lpr3sbd_btael; set lpr3diag_b;
by kontakt_id;
if first.kontakt_id then diag_count= 0;
diag_count+1;
run;
proc freq data=lpr3sbd_btael;
tables diag_count;
title 'b-count';
run;
/* laver én variabel pr kode cpr */
* asdasdsadasdsadasdasdasdaslllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllldasd
VIRKER - MEN KAN EVT. OPTIMERES DA DEN ER LANGSOM VED MANGE VARIABLER
* asdasdsadasdsadasdasdasdaslllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllldasd
;
%macro diagvandret (dtyp,antalfra, antaltil);
%DO i = &antalfra %TO &antaltil;
%let d=&dtyp&i.;
data lpr3_&d. (keep=diagnose_id kontakt_id &d); set lpr3sbd_&dtyp.tael;
if diag_count=&i then &d=kode;
if diag_count=&i then output;
run;
proc sort data=lpr3_&d.;
by kontakt_id;
run;
%end;
%DO j = &antalfra %TO &antaltil;
data lpr3komorb&dtyp.&antaltil;
merge lpr3_&dtyp.&antalfra - lpr3_&dtyp&&j.;
by kontakt_id;
run;
%end;
%DO u = &antalfra %TO &antaltil;
proc datasets lib=work nolist;
delete lpr3_&dtyp&&u.;
quit;
run;
%end;
%mend;
* fordi der er 1 a obs i dette sæt,;
* filens endelige output vil hedde: lpr3komorba1 (a pga diagtype a, 1 pga antal obs 1);
%diagvandret(a,1,1)
*/der er 24 b observationer derfor kommer output til at hedde lpr3komorbb24:*/;
%diagvandret(b,1,24)
* der laves komplet fil med komorb;
data lpr3komorbtotal;
merge lpr3komorba1 lpr3komorbb24;
by kontakt_id;
run;
*/der merges nu med lprkontakt, fra først i dokumentet;
proc sort data=data5;
by kontakt_id;
run;
data lpr3komorbtotal1;
merge data5 (in=a) lpr3komorbtotal;
by kontakt_id;
if a;
run;
/*_____________________________________________________________________________*/
/*Prøver at fjerne alle med cancer*/
data lpr3cancer; set perm.lpr3komorb; Cancer=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'C00'<=substr(a(i),2,3)<='C26' OR 'C30'<=substr(a(i),2,3)<='C34' OR 'C37'<=substr(a(i),2,3)<='C41' OR 'C45'<=substr(a(i),2,3)<='C58' OR 'C60'<=substr(a(i),2,3)<='C76' OR 'C81'<=substr(a(i),2,3)<='C85' OR 'C90'<=substr(a(i),2,3)<='C97' OR 'C77'<=substr(a(i),2,3)<='C80' OR substr(a(i),2,3) in ('C43', 'C88') then Cancer=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'C00'<=substr(b(i),2,3)<='C26' OR 'C30'<=substr(b(i),2,3)<='C34' OR 'C37'<=substr(b(i),2,3)<='C41' OR 'C45'<=substr(b(i),2,3)<='C58' OR 'C60'<=substr(b(i),2,3)<='C76' OR 'C81'<=substr(b(i),2,3)<='C85' OR 'C90'<=substr(b(i),2,3)<='C97' OR 'C77'<=substr(b(i),2,3)<='C80' OR substr(b(i),2,3) in ('C43', 'C88') then Cancer=1;
drop i;
end;
run;
proc sql;
create table poplpr3 as select personnummer_encrypted, (max (cancer)) as cancer from lpr3cancer1 group by personnummer_encrypted;
quit;
data poplpr3_cancer;
set lpr3cancer;
if 1=cancer then delete;
run;
proc freq data=poplpr3;
tables cancer;
run;
/*
*/
data perm.lpr3komorb1;
length personnummer_encrypted $50.;
retain personnummer_encrypted kontakt_id aktionsdiagnose; set poplpr3_cancer;
run;
/* tester om der er missing values i cpr-numre: */
data lpr3komorbtest;
set perm.lpr3komorb;
x=0;
if personnummer_encrypted='' then x=1;
run;
proc freq data=lpr3komorbtest;
tables x;
run;
*========
*=======
*======== Død: først ujusteret;
ods pdf path = 'F:\Projekter\FSEID00005614\Sarahdata\Output\'file= 'ujusteretcox21.09
.pdf';
/*===================== Både DOAK og marevan=======================*/
/*DØD*/
proc phreg data=perm.analyse/*covsandwich(aggregate) plots (overlay=row cl)=cumhaz*/;
title 'Ujusteret cox regression død 190422';
class akcov(ref="0") coviddoed coviddoed c_kon(ref="M")lungetot(ref="0")pvd(ref="0") stroketot(ref="0") DM(ref="0")HF(ref="0") IHD(ref="0");
model timetoevent_doed*coviddoed(0)=akcov /rl;
ods output ParameterEstimates=coviddoed;
run;
ods pdf close;
/* Død: Justerer for alder, køn og andre relevante komorbiditeter */
proc phreg data=perm.analyse;
title 'justeret cox regression død age';
class akcov(ref="0") coviddoed c_kon(ref="M") agegroup(ref="4")lungetot(ref="0")pvd(ref="0") stroketot(ref="0") DM(ref="0")HF(ref="0") IHD(ref="0") DEMENT(ref="0")Rheumatologisk (ref="0")Nyre(ref="0") VTE(ref="0") tromb(ref="0") mekanisk(ref="0") ;
model timetoevent_doed*coviddoed(0)=akcov c_kon agegroup lungetot pvd stroketot DM HF IHD DEMENT Rheumatologisk Nyre VTE tromb mekanisk /rl;
ods output ParameterEstimates=coviddoed;
run;
/* Antagelse om proportionale hazards PHA, pha resultatet er ikke signifikant og HR er næsten 1, derfor opfylder den antagelse om pha. */
ods rtf path = 'F:\Projekter\FSEID00005614\Sarahdata\Output\' file = 'coxphakontrol.pdf';
proc phreg data=perm.analyse;
class akcov(ref="0") coviddoed;
model timetoevent_doed*coviddoed(0)=akcov pha /rl;
pha=timetoevent_doed*akcov;
run;
ods rtf close;
/* indlæggelser Ujusteret*/
ods pdf path = 'F:\Projekter\FSEID00005614\Sarahdata\Output\'file= 'ujusteretcox21.09
.pdf';
proc phreg data=perm.analyse /*covsandwich(aggregate) plots (overlay=row cl)=cumhaz*/;
title 'Ujusteret cox regression indægggelser';
class akcov(ref="0") indlaeggelse;
model tt_indlaeggelse*indlaeggelse(0,2)=akcov /rl;
run;
ods pdf close;
/*Indlæggelser: justeret*/
proc phreg data=perm.analyse /*covsandwich(aggregate) plots (overlay=row cl)=cumhaz*/;
title 'justeret cox regression age indlæggelser';
class akcov(ref="0") indlaeggelse c_kon(ref="M")agegroup(ref="4")lungetot(ref="0")pvd(ref="0") stroketot(ref="0") DM(ref="0")HF(ref="0") IHD(ref="0") DEMENT(ref="0")Rheumatologisk (ref="0")Nyre(ref="0")VTE(ref="0") tromb(ref="0") mekanisk(ref="0");
model tt_indlaeggelse*indlaeggelse(0,2)=akcov c_kon agegroup lungetot pvd stroketot DM HF IHD DEMENT Rheumatologisk Nyre VTE tromb mekanisk /rl;
run;
/* Antagelse om proportionale hazards PHA, pha resultatet er ikke signifikant og HR er næsten 1, derfor opfylder den antagelse om pha. */
ods rtf path = 'F:\Projekter\FSEID00005614\Sarahdata\Output\' file = 'coxphakontrol.pdf';
proc phreg plots(cl overlay=byrow)=survival data=perm.analyse;
class akcov(ref="0") indlaeggelse;
model tt_indlaeggelse*indlaeggelse(0,2)=akcov pha /rl;
pha=tt_indlaeggelse*akcov;
run;
ods rtf close;
/* alternativ metode til ovenstående */
proc phreg data=perm.analyse;
class akcov(ref="0");
model tt_indlaeggelse*indlaeggelse(0,2)=akcov casetime;
casetime=tt_indlaeggelse*akcov;
proportionality_test: test casetime;
run;
/*ITA ujusteret*/
ods pdf path = 'F:\Projekter\FSEID00005614\Sarahdata\Output\'file= 'ujusteretcox21.09
.pdf';
proc phreg data=perm.analyse /*covsandwich(aggregate) plots (overlay=row cl)=cumhaz*/;
title 'Ujusteret cox regression';
class akcov(ref="0") ITA;
model tt_ita*ita(0,2)=akcov /rl;
run;
ods pdf close;
/*ITA justeret*/
proc phreg data=perm.analyse /*covsandwich(aggregate) plots (overlay=row cl)=cumhaz*/;
title 'justeret cox regression age';
class akcov(ref="0") ITA c_kon(ref="M")agegroup(ref="4")lungetot(ref="0")pvd(ref="0") stroketot(ref="0") DM(ref="0")HF(ref="0") IHD(ref="0")DEMENT(ref="0")Rheumatologisk (ref="0") Nyre(ref="0") VTE(ref="0") tromb(ref="0") mekanisk(ref="0");
model tt_ita*ITA(0,2)=akcov c_kon agegroup lungetot pvd stroketot DM HF IHD DEMENT Rheumatologisk Nyre VTE tromb mekanisk /rl;
run;
/*outcome: blødning ujusteret*/
proc phreg data=perm.analyse /*covsandwich(aggregate) plots (overlay=row cl)=cumhaz*/;
title 'Ujusteret cox regression';
class akcov(ref="0") COVID_blod;
model tt_bloed*COVID_blod(0)=akcov /rl;
run;
/*Blødning justeret*/
proc phreg data=perm.analyse /*covsandwich(aggregate) plots (overlay=row cl)=cumhaz*/;
title 'justeret cox regression age';
class akcov(ref="0") covid_blod c_kon(ref="M")agegroup(ref="4")lungetot(ref="0")pvd(ref="0") stroketot(ref="0") DM(ref="0")HF(ref="0") IHD(ref="0")DEMENT(ref="0")Rheumatologisk (ref="0")Nyre(ref="0") VTE(ref="0") tromb(ref="0") mekanisk(ref="0");
model tt_bloed*covid_blod(0)=akcov c_kon agegroup lungetot pvd stroketot DM HF IHD DEMENT Rheumatologisk Nyre VTE tromb mekanisk /rl;
run;
/* Antagelse om proportionale hazards PHA, pha resultatet er ikke signifikant og HR er næsten 1, derfor opfylder den antagelse om pha. */
proc phreg plots(cl overlay=byrow)=survival data=analyse;
class akcov(ref="0") ita;
model tt_ita*ITA(0)=akcov pha /rl;
pha=TT_ita*akcov;
run;
/* Antagelse om linearitet i kontinuerlige variable */
ods graphics on;
proc phreg plots (cl overlay=byrow)=survival data=perm.analyse;
class akcov(ref="0");
model tt_indlaeggelse*indlaeggelse(0)=akcov age agex2 /risklimits;
agex2 = age*age;
run;
/*Da p<0.5 er der ikke lineritet og derfor skal alder grupperes.*/
/*=======================KUN DOAK======================*/
/*proc phreg data=perm.outcomes_komorbiditeter /*covsandwich(aggregate) plots (overlay=row cl)=cumhaz
title 'Ujusteret cox regression';
class doakcov(ref="0") coviddoed;
model timetoevent_doed*coviddoed(0)=doakcov /rl;
run;
ods pdf close;
/* Død: Justerer for alder, køn og andre relevante komorbiditeter
proc phreg data=perm.DOAK_indlaeggelse_komorbiteter /*covsandwich(aggregate) plots (overlay=row cl)=cumhaz
title 'justeret cox regression age';
class doakcov(ref="0") coviddoed c_kon(ref="M")lungetot(ref="0")pvd(ref="0") stroketot(ref="0") DM(ref="0")HF(ref="0") IHD(ref="0");
model timetoevent_doed*coviddoed(0)=doakcov c_kon age lungetot pvd stroketot DM HF IHD /rl;
ods output ParameterEstimates=coviddoed;
run;
/* dette virker ikke for mig - finde ud af hvad der forefår*/
/* Antagelse om proportionale hazards PHA
ods rtf path = 'F:\Projekter\FSEID00005614\Sarahdata\Output\' file = 'coxphakontrol.pdf';
proc phreg plots(cl overlay=byrow)=survival data=perm.DOAK_indlaeggelse_komorbiteter;
class doakcov(ref="0") coviddoed;
model timetoevent_doed*coviddoed(0)=doakcov pha /rl;
pha=timetoevent_doed*doakcov;
run;
ods rtf close;
/* indlæggelser Ujusteret
ods pdf path = 'F:\Projekter\FSEID00005614\Sarahdata\Output\'file= 'ujusteretcox21.09
.pdf';
proc phreg data=perm.outcomes_komorbiditeter /*covsandwich(aggregate) plots (overlay=row cl)=cumhaz;
title 'Ujusteret cox regression';
class doakcov(ref="0") indlaeggelse;
model timetoevent_indlaeggelse*indlaeggelse(0)=doakcov /rl;
run;
ods pdf close;
/*Indlæggelser: justeret*/
/*ITA ujusteret
ods pdf path = 'F:\Projekter\FSEID00005614\Sarahdata\Output\'file= 'ujusteretcox21.09
.pdf';
proc phreg data=perm.outcomes_komorbiditeter /*covsandwich(aggregate) plots (overlay=row cl)=cumhaz;
title 'Ujusteret cox regression';
class doakcov(ref="0") ITA;
model timetoevent_ita*ita(0)=doakcov /rl;
run;
ods pdf close;
/*ITA justeret
proc phreg data=perm.outcomes_komorbiditeter /*covsandwich(aggregate) plots (overlay=row cl)=cumhaz;
title 'justeret cox regression age';
class doakcov(ref="0") ITA c_kon(ref="M")lungetot(ref="0")pvd(ref="0") stroketot(ref="0") DM(ref="0")HF(ref="0") IHD(ref="0");
model timetoevent_ita*ITA(0)=doakcov c_kon age lungetot pvd stroketot DM HF IHD /rl;
run; /*
library(haven)
analyse <- data.frame(read_sas("analyse.sas7bdat",
NULL))
analyse$agegrp<-factor(analyse$agegroup,levels=c("1","2","3","4","5","6","7","8","9"), ordered = FALSE)
analyse$sex<- as.factor(analyse$C_KON)
analyse$C_KON<-NULL
analyse$agegroup<-NULL
View(analyse)
library(survival)
library(timereg)
rm()
gc()
crudedod<-coxph(Surv(Timetoevent_doed,coviddoed==1)~akcov, data=analyse)
summary(crudedod)
justdod<-coxph(Surv(Timetoevent_doed,coviddoed==1)~akcov+sex+agegrp+lungetot+PVD+Nyre+stroketot+dm+HF+IHD+dement+rheumatologisk+tromber, data=analyse)
summary(justdod)
pred=survfit(justdod)
plot(pred)
library(timereg)
#cifreg<-prop.odds.subdist(Event(tt_ind,indlaeggelse)~akcov+sex+agegrp+lungetot+PVD+stroketot+dm+HF+IHD+dement+rheumatologisk,data=analyse,cause=1)
#summary(cifreg)
gc()
testcens1=coxph(Surv(tt_ind,indlaeggelse==0)~akcov+sex+agegrp+lungetot+PVD+stroketot+dm+HF+IHD+Nyre+dement+rheumatologisk+VTE+tromb+mekanisk,data=analyse)
summary(testcens1)
testcens2=coxph(Surv(tt_ita2,ITA==0)~akcov+sex+agegrp+lungetot+PVD+stroketot+dm+HF+IHD+Nyre+dement+rheumatologisk+VTE+tromb+mekanisk,data=analyse)
summary(testcens2)
library(mets)
cifbin<-binreg(Event(tt_ind,indlaeggelse)~akcov+sex+agegrp+lungetot+PVD+stroketot+dm+HF+IHD+Nyre+dement+rheumatologisk+VTE+tromb+mekanisk,data=analyse,cause=1,time=14)
summary(cifbin)
cifbincens<-binreg(Event(tt_ind,indlaeggelse)~akcov+sex+agegrp+lungetot+PVD+stroketot+dm+HF+IHD+Nyre+dement+rheumatologisk+VTE+tromb+mekanisk,data=analyse,cause=1,time=14,cens.model=~strata(agegrp,Nyre))
summary(cifbincens)
cifbinita<-binreg(Event(tt_ita2,ITA)~akcov+sex+agegrp+lungetot+PVD+stroketot+dm+HF+IHD+Nyre+dement+rheumatologisk+VTE+tromb+mekanisk,data=analyse,cause=1,time=14)
summary(cifbinita)
#plot
analyse$agegrp2<-as.factor(analyse$agegrp)
out<-coxph(Surv(Timetoevent_doed,coviddoed==1)~akcov+sex+lungetot+PVD+stroketot+agegrp+dm+HF+IHD+dement+rheumatologisk+VTE+tromb+mekanisk, data=analyse)
newdata=data.frame(akcov=c(0,1),sex="K",lungetot=0,PVD=0,stroketot=0,dm=0,HF=0,IHD=0,dement=0,rheumatologisk=0,VTE=0,tromb=0,mekanisk=0,agegrp=3)
pred.cox=survfit(out,newdata)
png(filename="predcumhaz2.png",width=18,height=12, units="cm",res=300)
plot(pred.cox,lty=1,lwd=1,xlab="Days",ylab="Predicted cumulative hazard",ylim=c(0,0.2),col=c(2,1),fun="cumhaz")
legend("topright",inset=.05,col=1:2,lwd=1,legend=c("Anticoagulant treatment","No anticoagulant treatment"),cex=0.81)
dev.off()
summary(out)
/* LPR data
Dette program merger LPR data for de enkelte år sammen til en stor LPR fil.
Da nogle indlæggelser har op til 150(!- Sarah) Bi diagnoser er man nødt til at vende dem rundt, på samme måde som DrKOL, så hver patient kun har en række med alle diagnoser.
*/
/* laver workfil af t_adm */
data L1;
set in05614.DS_LPR_T_ADM;
run;
proc sort data=L1;
by V_cpr_encrypted;
run;
/*kun dem der er covidpositive*/
data c1;
set perm.covidpositive;
rename CPR_encrypted = V_cpr_encrypted;
run;
data LPR_adm;
merge c1 (in=a) L1;
by V_cpr_encrypted;
if a;
run;
data perm.LPR_adm1; set lpr_adm;
rename C_ADIAG=P1 V_cpr_encrypted=cpr_encrypted;
run;
/*laver filsæt med cancerdiagnoser som skal ekskluderes.*/
data lpr_adm_eks; set LPR_ADM1; Cancer=0;
array p {3} p1-p3; /* q-diagn. (lpr2)*/
do i = 1 to 3;
if 'C00'<=substr(p(i),2,3)<='C26' OR 'C30'<=substr(p(i),2,3)<='C34' OR 'C37'<=substr(p(i),2,3)<='C41' OR 'C45'<=substr(p(i),2,3)<='C58' OR 'C60'<=substr(p(i),2,3)<='C76' OR 'C81'<=substr(p(i),2,3)<='C85' OR 'C90'<=substr(p(i),2,3)<='C97' OR 'C77'<=substr(p(i),2,3)<='C80' OR substr(p(i),2,3) in ('C43', 'C88') then Cancer=1;
drop i;
end;
run;
data cancer_eks; cancerslet2=0;
set lpr_adm_eks;
if cancer=1 and Covid_samp_date<D_inddto+(5*365.25) then do cancerslet2=1; end;
run;
data cancer_eks_lpr2; Keep Cancerslet2 Cpr_encrypted;
set Cancer_eks;
run;
proc sql;
create table perm.cancer_eks_lpr_rigtig as select cpr_encrypted, (max (cancerslet2)) as cancerslet2 from cancer_eks_lpr2 group by cpr_encrypted;
quit;
proc freq data=perm.cancer_eks_lpr_rigtig;
tables cancerslet2;
run;
proc sort data=perm.cancer_eks_lpr_rigtig;
by cpr_encrypted;
run:
/* dette datasæt bliver merget ved inddeling af diagnoser helt tilsidst (anden fil)*/
/* sorterer adm efter k_recnum */
proc sort data=lpr_adm; by k_recnum;
run;
/* laver workfil af t_diag */
data lpr_diag; set in05614.DS_LPR_T_DIAG;
run;
/* Omdøb før merge samt omdøb label for samme variabel (kun for syns skyld) */
data lpr_diag; set lpr_diag; rename v_recnum = k_recnum; run;
data lpr_diag; set lpr_diag; label k_recnum=k_recnum; run;
/* sorterer diag efter k_recnum */
proc sort data=lpr_diag; by k_recnum;
run;
/* Behold kun A + B eller plus diag */
data lpr_ABP1; set lpr_diag;
where c_diagtype = "A" or c_diagtype = "B" or c_diagtype = "+";
run;
/* Lav datasæt vandret - med alle diagnosekoder ud for hvert cpr nummer - uanset type (OBS! Der kan således ikke skelnes mellem A, B og P diagnoser senere!!) -
her ændres navnene så de ej kaldes a/b/p men q således at der mere overskueligt kan merges med nyt og gammelt lpr i næste skridt */
data lpr_abp; set lpr_ABP1;
if c_diagtype="+" then q=c_diag;
if c_diagtype="A" then q=c_diag;
if c_diagtype="B" then q=c_diag;
run;
/* for at tælle antal koder per recnum - */
data lpr_tot_q; set lpr_abp;
by k_recnum;
if first.k_recnum then recnum_count= 0;
recnum_count+1;
run;
proc freq data=lpr_tot_q nlevels;
tables recnum_count;
title abp-diag;
run;
* Her laves macro som trækker hver diagnoser ud på linje ifh k_recnum, således at der kommer fx 21 q diagnoser ud fra ét recnum;
* denne markeres fra og med "%macro ...... til og med "%mend" og submittes;
%macro lpr2diag (dtyp,antalfra, antaltil);
%DO i = &antalfra %TO &antaltil;
%let d=&dtyp&i.;
data lpr2_&d. (keep=k_recnum &d); set lpr_tot_&dtyp;
if recnum_count=&i then &d=q;
if recnum_count=&i then output;
run;
proc sort data=lpr2_&d.;
by k_recnum;
run;
%end;
%DO j = &antalfra %TO &antaltil;
data lpr2komorb&dtyp.&antaltil;
merge lpr2_&dtyp.&antalfra - lpr2_&dtyp&&j.;
by k_recnum;
run;
%end;
%DO u = &antalfra %TO &antaltil;
proc datasets lib=work nolist;
delete lpr2_&dtyp&&u.;
quit;
run;
%end;
data lpr2diag_&antaltil; set lpr2komorb&dtyp.&antaltil;
run;
proc datasets lib=work nolist;
delete lpr2komorb&dtyp.&antaltil;
run;
%mend;
* her udfyldes den data som macroen skal benytte "diagnosetype, recnum fra, recnum til" (her lpr2diag(q,1,21)
Deles her op i to da SAS bliver langsom når den når ud i mange loops af individuelle merges;
%lpr2diag(q,1,20)
%lpr2diag(q,21,40)
%lpr2diag(q,41,60)
%lpr2diag(q,61,80)
%lpr2diag(q,81,100)
%lpr2diag(q,101,120)
%lpr2diag(q,121,150)
%macro lpr2merge(antaltil1, antaltil2, antaltil3, antaltil4, antaltil5, antaltil6, antaltil7); /* OBS OBS - "antaltil1, 2 etc" SKAL STIGE ELLER VÆRE 0. Der er ikke lavet fejlsikring for andre værdier*/
%let antaltilmax=&antaltil1;
proc sort data=lpr2diag_&antaltil1; by k_recnum; run;
%if &antaltil2 ne 0 %then; %else %goto merge;
%let antaltilmax=&antaltil2;
proc sort data=lpr2diag_&antaltil2; by k_recnum; run;
%if &antaltil3 ne 0 %then; %else %goto merge;
%let antaltilmax=&antaltil3;
proc sort data=lpr2diag_&antaltil3; by k_recnum; run;
%if &antaltil4 ne 0 %then; %else %goto merge;
%let antaltilmax=&antaltil4;
proc sort data=lpr2diag_&antaltil4; by k_recnum; run;
%if &antaltil5 ne 0 %then; %else %goto merge;
%let antaltilmax=&antaltil5;
proc sort data=lpr2diag_&antaltil5; by k_recnum; run;
%let antaltilmax=&antaltil6;
proc sort data=lpr2diag_&antaltil6; by k_recnum; run;
%if &antaltil7 ne 0 %then; %else %goto merge;
%let antaltilmax=&antaltil7;
proc sort data=lpr2diag_&antaltil7; by k_recnum; run;
%merge:
data lpr2_diagmerge&antaltil1;
set lpr2diag_&&antaltil1.;
run;
%if &antaltil2 ne 0 %then; %else %goto last;
data lpr2_diagmerge&antaltil2;
merge lpr2_diagmerge&antaltil1. lpr2diag_&antaltil2;
by k_recnum; run;
%if &antaltil3 ne 0 %then; %else %goto last;
data lpr2_diagmerge&antaltil3;
merge lpr2_diagmerge&antaltil2. lpr2diag_&antaltil3;
by k_recnum; run;
%if &antaltil4 ne 0 %then; %else %goto last;
data lpr2_diagmerge&antaltil4;
merge lpr2_diagmerge&antaltil3. lpr2diag_&antaltil4;
by k_recnum; run;
%if &antaltil5 ne 0 %then; %else %goto last;
data lpr2_diagmerge&antaltil5;
merge lpr2_diagmerge&antaltil4. lpr2diag_&antaltil5;
by k_recnum; run;
%if &antaltil6 ne 0 %then; %else %goto last;
data lpr2_diagmerge&antaltil6;
merge lpr2_diagmerge&antaltil5. lpr2diag_&antaltil6;
by k_recnum; run;
%if &antaltil7 ne 0 %then; %else %goto last;
data lpr2_diagmerge&antaltil7;
merge lpr2_diagmerge&antaltil6. lpr2diag_&antaltil7;
by k_recnum; run;
%last:
data lpr2diag;
set lpr2_diagmerge&antaltilmax;
by k_recnum;
run;
%mend lpr2merge;
%lpr2merge(20,40,60,80,100,120,150)
/*OBS: har ikke lavet det om fra Peters*/
/* Merge til en fil med diagkoder i fil */
data lpr2_prepre; merge lpr_adm (in=a) Lpr2_diagmerge150;
by k_recnum; if a;
run;
/* drop unødvendige variable */ /* tilføjet "keep v_alder, c_sex"*/
data perm.lpr2_pre; keep /*v_alder c_sex c_adiag d_inddto d_uddto */ covid_samp_DATE c_pattype v_cpr_encrypted d_inddto/* c_diag c_diagtype */ q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 q21 q22 q23 q24 q25 q26 q27 q28 q29 q30 q31 q32 q33 q34 q35 q36 q37 q38 q39 q40 q41 q42 q43 q44 q45 q46 q47 q48 q49 q50 q51 q52 q53 q54 q55 q56 q57 q58 q59 q60 q61 q62 q63 q64 q65 q66 q67 q68 q69 q70 q71 q72 q73 q74 q75 q76 q77 q78 q79 q80 q81 q82 q83 q84 q85 q86 q87 q88 q89 q90 q91 q92 q93 q94 q95 q96 q97 q98 q99 q100 q101 q101 q102 q103 q104 q105 q106 q107 q108 q109 q110 q111 q112 q113 q114 q115 q116 q117 q118 q119 q120 q121 q122 q123 q124 q125 q126 q126 q127 q128 q129 q130 q131 q132 q133 q134 q135 q136 q137 q138 q139 q140 q141 q142 q143 q144 q145 q146 q147 q148 q149 q150;
set lpr2_prepre;
run;
/*Her kan cancer fjernes? - jeg får små tal
/* omarrangerer variable*/
data lpr2; rename v_cpr_encrypted=cpr_encrypted;
retain v_cpr_encrypted c_pattype d_inddto covid_samp_DATE /* c_adiag c_diag c_diagtype */ q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 q21 q22 q23 q24 q25 q26 q27 q28 q29 q30 q31 q32 q33 q34 q35 q36 q37 q38 q39 q40 q41 q42 q43 q44 q45 q46 q47 q48 q49 q50 q51 q52 q53 q54 q55 q56 q57 q58 q59 q60 q61 q62 q63 q64 q65 q66 q67 q68 q69 q70 q71 q72 q73 q74 q75 q76 q77 q78 q79 q80 q81 q82 q83 q84 q85 q86 q87 q88 q89 q90 q91 q92 q93 q94 q95 q96 q97 q98 q99 q100 q101 q101 q102 q103 q104 q105 q106 q107 q108 q109 q110 q111 q112 q113 q114 q115 q116 q117 q118 q119 q120 q121 q122 q123 q124 q125 q126 q126 q127 q128 q129 q130 q131 q132 q133 q134 q135 q136 q137 q138 q139 q140 q141 q142 q143 q144 q145 q146 q147 q148 q149 q1/* d_inddto d_uddto */ ;
set perm.lpr2_pre;
run;
/*_________________________________________________________________/*
/* perm fil lpr2 alene, der laves 1/0 række ifh om pt har lpr2 data eller ej - relevant til senere vurdering ved merge */
data perm.lpr2;
length cpr_encrypted $50.;
retain cpr_encrypted lpr2;
drop c_pattype d_inddto COVID_SAMP_DATE;
lpr2=0;
set lpr2;
if c_pattype ne '' then lpr2=1;
run;
proc sort data=perm.lpr2;
by cpr_encrypted;
run;
data lpr3komorb1; set perm.lpr3komorb; drop aktionsdiagnose diagnose_id kontakt_id; lpr3=0;
if kontakt_id ne '' then lpr3=1;
rename PERSONNUMMER_ENCRYPTED=CPR_ENCRYPTED;
run;
proc sort data=lpr3komorb1;
by cpr_encrypted;
run;
data lpr3komorb2; length cpr_encrypted $50.; set lpr3komorb1; run;
/* merger med lpr3 data*/
data perm.lpr_2_3;
merge perm.lpr2 lpr3komorb2;
by cpr_encrypted;
if cpr_encrypted = '' then delete; /*sletter ingen her=alle har værdi i cpr_encr */
run;
/* udtræk af specifikke sygdomme (e.g. komorbiditeter) fra LPR3 fil fra "LPR3.sas" */
/* lavet til udtræk jf. charlson comorbidity index som defineret af artikel "Coding Algorithms for defining comorbidities in ICD-9-CM and ICD-10 administrative data" af H. Quan et al fra Med Care 2005;43: 110-1139 */
/* definerer hvor permanent fil gemmes */
data lpr3pop; set perm.lpr_2_3; run;
proc sort data=lpr3pop;
by cpr_encrypted;
run;
/* Beholder kun kontakter 10 år op til recept dato */
/* data lpr_cut; set lpr_merge;
if D_UDDTO>=expdato then delete;
if (expdato - (10*365.25))>D_UDDTO then delete;
run;
*/
/* Nedenstående er for PVD - ser om der for hver obs (patient) findes ENTEN A, B eller + diagnose.
Ved brug:
- skift array-tal både i linjen efter "array" samt hele linjen efter "do" - samme tal for alle komorbiditeter i et datasæt
- evt skift diagnosekoder i nedenstående intervaller, hvis behov for diagn. koder uden for intervaller i samme sygdomskategori: ____ "or substr(a,2,3) in ('KODE1', 'KODE2')" (under A) ___ "or substr(b(i),2,3) in ('KODE1', 'KODE2')" (under B) ___ "or substr(p(i),2,3) in ('KODE1', 'KODE2')" (under P)
- skift "then 'variabel'=1" til relevant variabel navn */
/* done - ej testet - forkortet så meget som muligt: I70-I71, I731-I739, I771, I790, I792, K551, K558, K559, Z958, Z959 */
/* udtræk af specifikke sygdomme (e.g. komorbiditeter) fra LPR3 fil fra "LPR3.sas" */
/* lavet til udtræk jf. charlson comorbidity index som defineret af artikel "Coding Algorithms for defining comorbidities in ICD-9-CM and ICD-10 administrative data" af H. Quan et al fra Med Care 2005;43: 110-1139 */
data lprpvd; set lpr3pop; pvd=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'I70'<=substr(a(i),2,3)<='I71' or 'I731'<=substr(a(i),2,4)<='I739' or substr(a(i),2,4) in ('I771', 'I790', 'I792', 'K551', 'K558', 'K559', 'Z958', 'Z959') then pvd=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 17;
if 'I70'<=substr(b(i),2,3)<='I71' or 'I731'<=substr(b(i),2,4)<='I739' or substr(b(i),2,4) in ('I771', 'I790', 'I792', 'K551', 'K558', 'K559', 'Z958', 'Z959') then pvd=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'I70'<=substr(q(i),2,3)<='I71' or 'I731'<=substr(q(i),2,4)<='I739' or substr(q(i),2,4) in ('I771', 'I790', 'I792', 'K551', 'K558', 'K559', 'Z958', 'Z959') then pvd=1;
drop i;
end;
run;
proc sql;
create table PVD as select cpr_encrypted, (max (PVD)) as PVD from lprpvd group by cpr_encrypted;
quit;
/* bindevævslidelser
Reumatoid artritis: DM05
Andre former for leddegigt: DM06
Sero neg. RA DM068
RA UNS DM069
M08 JUVENIL artrit
Generaliserede bindevævssygdomme: DM30-DM36
- herunder lupus, systemisk sklerose, polyarteritis nodusum
*/
/* done - ej testet - Charlson artikel: M05, M06, M315, M32-M34, M351, M353, M360 */
data lprrheuma; set lpr3pop; rheum=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'M32'<=substr(a(i),2,3)<='M34' or substr(a(i),2,4) in ('M05', 'M06', 'M315', 'M351', 'M353', 'M360') or substr(a(i),2,3) in ('M05', 'M06') then rheum=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'M32'<=substr(b(i),2,3)<='M34' or substr(b(i),2,4) in ('M05', 'M06', 'M315', 'M351', 'M353', 'M360') or substr(b(i),2,3) in ('M05', 'M06') then rheum=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'M32'<=substr(q(i),2,3)<='M34' or substr(q(i),2,4) in ('M05', 'M06', 'M315', 'M351', 'M353', 'M360') or substr(q(i),2,3) in ('M05', 'M06') then rheum=1;
drop i;
end;
run;
proc sql;
create table rheumatologisk as select cpr_encrypted, (max (rheum)) as rheumatologisk from lprrheuma group by cpr_encrypted;
quit;
/* Kroniske lungesygdomme efter charlston */
/* - lavet - ej testet - charlson artikel: J278, J279, J40-J47, J60-67, J684, J701, J703 */
data lprlunge; set lpr3pop; lunge=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'J40'<=substr(a(i),2,3)<='J47' or 'J60'<=substr(a(i),2,3)<='J67' or substr(a(i),2,4) in ('J278', 'J279', 'J684', 'J701', 'J703') then lunge=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'J40'<=substr(b(i),2,3)<='J47' or 'J60'<=substr(b(i),2,3)<='J67' or substr(b(i),2,4) in ('J278', 'J279', 'J684', 'J701', 'J703') then lunge=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'J40'<=substr(q(i),2,3)<='J47' or 'J60'<=substr(q(i),2,3)<='J67' or substr(q(i),2,4) in ('J278', 'J279', 'J684', 'J701', 'J703') then lunge=1;
drop i;
end;
run;
proc sql;
create table Lungesyg as select cpr_encrypted, (max (lunge)) as Lungesyg from lprlunge group by cpr_encrypted;
quit;
/* asdasdsadasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd
herunder opdelte lungesygdomme ifh mulige komorbiditeter */
/*Kroniske lungesygdomme - bronkiektasier j47*/
data lprbronk; set lpr3pop; bronk=0;
array b {24} b1-b24; /* b-diagn.*/
do i = 1 to 17;
if substr(b(i),2,3) in ('J47') then bronk=1;
drop i;
end;
array a {3} a1-a3; /* aa-diagn.*/
do i = 1 to 3;
if substr(a(i),2,3) in ('J47') then bronk=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn.(lpr2)*/
do i = 1 to 150;
if substr(q(i),2,3) in ('J47') then bronk=1;
drop i;
end;
run;
proc sql;
create table Bronk as select cpr_encrypted, (max (bronk)) as Bronkiek from lprbronk group by cpr_encrypted;
quit;
*//*
Kroniske lungesygdomme - ILS J84, Sarkoidose D86 */;
data lprils; set lpr3pop; ILS=0;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if substr(b(i),2,3) in ('J84') OR substr(b(i),2,3) in ('D86') then ILS=1;
drop i;
end;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if substr(a(i),2,3) in ('J84') OR substr(a(i),2,3) in ('D86') then ILS=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 48;
if substr(q(i),2,3) in ('J84') OR substr(q(i),2,3) in ('D86') then ILS=1;
drop i;
end;
run;
proc sql;
create table ILS as select cpr_encrypted, (max (ILS)) as ILS from lprils group by cpr_encrypted;
quit;
/*=================================== herover opdelte lungesygdomme ifh mulige komorbiditeter ============== */
/* Iskæmiske hjertesygdomme DI20-DI25 */
/* - done ej testet - charlson artikel: Myocardial infarction: I21, I22, I252 */
data lprihd; set lpr3pop; IHD=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if substr(a(i),2,3) in ('I21', 'I22') or substr(a(i),2,4) in ('I22', 'I252') then IHD=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if substr(b(i),2,3) in ('I21', 'I22') or substr(b(i),2,4) in ('I22', 'I252') then IHD=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if substr(q(i),2,3) in ('I21', 'I22') or substr(q(i),2,4) in ('I22', 'I252') then IHD=1;
drop i;
end;
run;
proc sql;
create table IHD as select cpr_encrypted, (max (IHD)) as IHD from lprihd group by cpr_encrypted;
quit;
/* Hjertesvigt DI50 */
/* - done ej testet charlson artikel: congestive heart failure: I099, I110, I130, I132, I255, I420, I43, I50, P290 */
data lprhf; set lpr3pop; HF=0;
array a {3} a1-a3; /* b-diagn. */
do i = 1 to 3;
if 'I425'<=substr(a(i),2,4)<='I429' or substr(a(i),2,4) in ('I099', 'I110', 'I130', 'I132', 'I255', 'I420', 'P290') or substr(a(i),2,3) in ('I43', 'I50') then HF=1; /* a-diagn. */
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'I425'<=substr(b(i),2,4)<='I429' or substr(b(i),2,4) in ('I099', 'I110', 'I130', 'I132', 'I255', 'I420', 'P290') or substr(b(i),2,3) in ('I43', 'I50') then HF=1; /* bdiag */
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'I425'<=substr(q(i),2,4)<='I429' or substr(q(i),2,4) in ('I099', 'I110', 'I130', 'I132', 'I255', 'I420', 'P290') or substr(q(i),2,3) in ('I43', 'I50') then HF=1; /* bdiag */
drop i;
end;
run;
proc sql;
create table HF as select cpr_encrypted, (max (HF)) as HF from lprHF group by cpr_encrypted;
quit;
/* Diabetes
type 1: DE10
Type 2: DE11
Andre: DE13
DM UNS: DE14 */
/* charlson artikel:
DM u. kronisk kompl.: E100, E101, E106, E108, E109, E110, E111, E116, E118, E119, E120, E121, E126, E128, E129, E130, E131, E136, E138, E139, E140, E141, E146, E148, E149.
DM m. kronisk kompl.: E102-E105, E107, E112-115, E117, E122-125, E127, E132-E135, E137, E142-E145, E147
*/
data lprdmukomp; set lpr3pop; DMukomp=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if substr(a(i),2,4) in ('E100', 'E101', 'E106', 'E108', 'E109', 'E110', 'E111', 'E116', 'E118', 'E119', 'E120', 'E121', 'E126', 'E128', 'E129', 'E130', 'E131', 'E136', 'E138', 'E139', 'E140', 'E141', 'E146', 'E148', 'E149') then DMukomp=1;
drop i;
end;
array b {24} b1-b24; /* +-diagn. */
do i = 1 to 24;
if substr(b(i),2,4) in ('E100', 'E101', 'E106', 'E108', 'E109', 'E110', 'E111', 'E116', 'E118', 'E119', 'E120', 'E121', 'E126', 'E128', 'E129', 'E130', 'E131', 'E136', 'E138', 'E139', 'E140', 'E141', 'E146', 'E148', 'E149') then DMukomp=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if substr(q(i),2,4) in ('E100', 'E101', 'E106', 'E108', 'E109', 'E110', 'E111', 'E116', 'E118', 'E119', 'E120', 'E121', 'E126', 'E128', 'E129', 'E130', 'E131', 'E136', 'E138', 'E139', 'E140', 'E141', 'E146', 'E148', 'E149') then DMukomp=1;
drop i;
end;
run;
proc sql;
create table DMukomp as select cpr_encrypted, (max (DMukomp)) as DMukomp from lprdmukomp group by cpr_encrypted;
quit;
/*
DM m. kronisk kompl.: E102-E105, E107, E112-115, E117, E122-125, E127, E132-E135, E137, E142-E145, E147 */
data lprdmkomp; set lpr3pop; DMkomp=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'E102'<=substr(a(i),2,4)<='E105' or 'E112'<=substr(a(i),2,4)<='E115' or 'E122'<=substr(a(i),2,4)<='E125' or 'E132'<=substr(a(i),2,4)<='E135' or 'E142'<=substr(a(i),2,4)<='E145' or substr(a(i),2,4) in ('E107', 'E117','E127', 'E137', 'E147') then DMkomp=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'E102'<=substr(b(i),2,4)<='E105' or 'E112'<=substr(b(i),2,4)<='E115' or 'E122'<=substr(b(i),2,4)<='E125' or 'E132'<=substr(b(i),2,4)<='E135' or 'E142'<=substr(b(i),2,4)<='E145' or substr(b(i),2,4) in ('E107', 'E117','E127', 'E137', 'E147') then DMkomp=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'E102'<=substr(q(i),2,4)<='E105' or 'E112'<=substr(q(i),2,4)<='E115' or 'E122'<=substr(q(i),2,4)<='E125' or 'E132'<=substr(q(i),2,4)<='E135' or 'E142'<=substr(q(i),2,4)<='E145' or substr(q(i),2,4) in ('E107', 'E117','E127', 'E137', 'E147') then DMkomp=1;
drop i;
end;
run;
proc sql;
create table DMkomp as select cpr_encrypted, (max (DMkomp)) as DMkomp from lprdmkomp group by cpr_encrypted;
quit;
/* Cancer: Neoplasmer DC00-DD48 ( DD0** er CIS, øvr DD er godartede tumorer)
Kræftsygdomme DC00-96 */
/* Charlson artikel: "Any malignancy, including lymphona and leukemia except malignant neoplasm og skin: C00-C26, C30-34, C37-41, C43, C45-58, C60-76, C81-C85, C88, C90-97
Metastatic solid tumor: C77-C80 */
data lprcancer; set lpr3pop; Cancer2=0; Cancer3=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'C00'<=substr(a(i),2,3)<='C26' OR 'C30'<=substr(a(i),2,3)<='C34' OR 'C37'<=substr(a(i),2,3)<='C41' OR 'C45'<=substr(a(i),2,3)<='C58' OR 'C60'<=substr(a(i),2,3)<='C76' OR 'C81'<=substr(a(i),2,3)<='C85' OR 'C90'<=substr(a(i),2,3)<='C97' OR 'C77'<=substr(a(i),2,3)<='C80' OR substr(a(i),2,3) in ('C43', 'C88') then Cancer3=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'C00'<=substr(b(i),2,3)<='C26' OR 'C30'<=substr(b(i),2,3)<='C34' OR 'C37'<=substr(b(i),2,3)<='C41' OR 'C45'<=substr(b(i),2,3)<='C58' OR 'C60'<=substr(b(i),2,3)<='C76' OR 'C81'<=substr(b(i),2,3)<='C85' OR 'C90'<=substr(b(i),2,3)<='C97' OR 'C77'<=substr(b(i),2,3)<='C80' OR substr(b(i),2,3) in ('C43', 'C88') then Cancer3=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'C00'<=substr(q(i),2,3)<='C26' OR 'C30'<=substr(q(i),2,3)<='C34' OR 'C37'<=substr(q(i),2,3)<='C41' OR 'C45'<=substr(q(i),2,3)<='C58' OR 'C60'<=substr(q(i),2,3)<='C76' OR 'C81'<=substr(q(i),2,3)<='C85' OR 'C90'<=substr(q(i),2,3)<='C97' OR 'C77'<=substr(q(i),2,3)<='C80' OR substr(q(i),2,3) in ('C43', 'C88') then Cancer2=1;
drop i;
end;
run;
proc sql;
create table cancer2 as select cpr_encrypted, (max (cancer2)) as cancer2 from lprcancer group by cpr_encrypted;
quit;
proc sql;
create table cancer3 as select cpr_encrypted, (max (cancer3)) as cancer3 from lprcancer group by cpr_encrypted;
quit;
/* STROKE - både hæmoragisk (DI61) og iskæmisk (DI63, uden oplysning om blødning eller infarkt DI64, apo UNS DI649*/
/* CHARLSON artikel: Cerebro vasc. disease: G45, G46, H340, I60-I69 */
data lprstroke; set lpr3pop; stroke=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'I60'<=substr(a(i),2,3)<='I69' or substr(a(i),2,3) in ('G45', 'G46') or substr(a(i),2,4) in ('H340') then stroke=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'I60'<=substr(b(i),2,3)<='I69' or substr(b(i),2,3) in ('G45', 'G46') or substr(b(i),2,4) in ('H340') then stroke=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'I60'<=substr(q(i),2,3)<='I69' or substr(q(i),2,3) in ('G45', 'G46') or substr(q(i),2,4) in ('H340') then stroke=1;
drop i;
end;
run;
proc sql;
create table stroke as select cpr_encrypted, (max (stroke)) as stroke from lprstroke group by cpr_encrypted;
quit;
/* kronisk leversygdom */ /*
/* Charlson artikel:
Mild liver disease: B18, K700-703, K709, K713-715, K717, K73, K74, K760, K762-764, K768, K769, Z944 */
data lprlivermild; set lpr3pop; livermild=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'K700'<=substr(a(i),2,4)<='K703' or 'K713'<=substr(a(i),2,4)<='K715' or 'K762'<=substr(a(i),2,4)<='K764' or substr(a(i),2,3) in ('B18', 'K73', 'K74') or substr(a(i),2,4) in ('K709', 'K717', 'K760', 'K768', 'K769', 'Z944') then livermild=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'K700'<=substr(b(i),2,4)<='K703' or 'K713'<=substr(b(i),2,4)<='K715' or 'K762'<=substr(b(i),2,4)<='K764' or substr(b(i),2,3) in ('B18', 'K73', 'K74') or substr(b(i),2,4) in ('K709', 'K717', 'K760', 'K768', 'K769', 'Z944') then livermild=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'K700'<=substr(q(i),2,4)<='K703' or 'K713'<=substr(q(i),2,4)<='K715' or 'K762'<=substr(q(i),2,4)<='K764' or substr(q(i),2,3) in ('B18', 'K73', 'K74') or substr(q(i),2,4) in ('K709', 'K717', 'K760', 'K768', 'K769', 'Z944') then livermild=1;
drop i;
end;
run;
proc sql;
create table livermild as select cpr_encrypted, (max (livermild)) as livermild from lprlivermild group by cpr_encrypted;
quit;
/* Moderate or severe liver disease: I850, I859, I864, I982, K704, K711, K721, K729, K765-K767 */
data lprlivermodsev; set lpr3pop; livermodsev=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'K765'<=substr(a(i),2,4)<='K767' or substr(a(i),2,4) in ('I850', 'I859', 'I864', 'I982', 'K704', 'K711', 'K721', 'K729') then livermodsev=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'K765'<=substr(b(i),2,4)<='K767' or substr(b(i),2,4) in ('I850', 'I859', 'I864', 'I982', 'K704', 'K711', 'K721', 'K729') then livermodsev=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'K765'<=substr(q(i),2,4)<='K767' or substr(q(i),2,4) in ('I850', 'I859', 'I864', 'I982', 'K704', 'K711', 'K721', 'K729') then livermodsev=1;
drop i;
end;
run;
proc sql;
create table livermodsev as select cpr_encrypted, (max (livermodsev)) as livermodsev from lprlivermodsev group by cpr_encrypted;
quit;
/* hospitals diagnosticeret nyresygdom */
/* Charlson artikel:
Renal disease: I120, I131, N032-037, N052-N057, N18-19, N250, Z490-Z492, Z940, Z992 */
data lprnyre; set lpr3pop; nyre=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'N032'<=substr(a(i),2,4)<='N037' or 'N052'<=substr(a(i),2,4)<='N057' or 'N18'<=substr(a(i),2,3)<='N19' or 'Z490'<=substr(a(i),2,4)<='Z492' or substr(a(i),2,4) in ('I120', 'I131', 'N250', 'Z940', 'Z992') then nyre=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'N032'<=substr(b(i),2,4)<='N037' or 'N052'<=substr(b(i),2,4)<='N057' or 'N18'<=substr(b(i),2,3)<='N19' or 'Z490'<=substr(b(i),2,4)<='Z492' or substr(b(i),2,4) in ('I120', 'I131', 'N250', 'Z940', 'Z992') then nyre=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'N032'<=substr(q(i),2,4)<='N037' or 'N052'<=substr(q(i),2,4)<='N057' or 'N18'<=substr(q(i),2,3)<='N19' or 'Z490'<=substr(q(i),2,4)<='Z492' or substr(q(i),2,4) in ('I120', 'I131', 'N250', 'Z940', 'Z992') then nyre=1;
drop i;
end;
run;
proc sql;
create table nyre as select cpr_encrypted, (max (nyre)) as Nyre from lprnyre group by cpr_encrypted;
quit;
/* Charlson aids/hiv: B20-B22, B24 */
data lprhiv; set lpr3pop; hiv=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'B20'<=substr(a(i),2,3)<='B22' or substr(a(i),2,3) in ('B24') then hiv=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'B20'<=substr(b(i),2,3)<='B22' or substr(b(i),2,3) in ('B24') then hiv=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'B20'<=substr(q(i),2,3)<='B22' or substr(q(i),2,3) in ('B24') then hiv=1;
drop i;
end;
run;
proc sql;
create table hiv as select cpr_encrypted, (max (hiv)) as hiv from lprhiv group by cpr_encrypted;
quit;
/* charlson peptic ulcer disease: K25-K28 */
data lprpeptic; set lpr3pop; peptic=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'K25'<=substr(a(i),2,3)<='K28' then peptic=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 17;
if 'K25'<=substr(B(i),2,3)<='K28' then peptic=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'K25'<=substr(q(i),2,3)<='K28' then peptic=1;
drop i;
end;
run;
proc sql;
create table peptic as select cpr_encrypted, (max (peptic)) as peptic from lprpeptic group by cpr_encrypted;
quit;
/* charlson hemiplegia / paraplegi: G041, G114, G801, G802, G810-834, G839 */
data lprplegi; set lpr3pop; plegi=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'G810'<=substr(a(i),2,4)<='G834' or substr(a(i),2,4) in ('G041', 'G114', 'G801', 'G802', 'G839') then plegi=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'G810'<=substr(b(i),2,4)<='G834' or substr(b(i),2,4) in ('G041', 'G114', 'G801', 'G802', 'G839') then plegi=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'G810'<=substr(q(i),2,4)<='G834' or substr(q(i),2,4) in ('G041', 'G114', 'G801', 'G802', 'G839') then plegi=1;
drop i;
end;
run;
proc sql;
create table plegi as select cpr_encrypted, (max (plegi)) as plegi from lprplegi group by cpr_encrypted;
quit;
/* charlson dementia: F00-F03, F051, G30, G311 */
data lprdement; set lpr3pop; dement=0;
array a {3} a1-a3; /* a-diagn. */
do i = 1 to 3;
if 'F00'<=substr(a(i),2,3)<='F03' or substr(a(i),2,3) in ('G30') or substr(a(i),2,4) in ('F051', 'G311') then dement=1;
drop i;
end;
array b {24} b1-b24; /* b-diagn. */
do i = 1 to 24;
if 'F00'<=substr(b(i),2,3)<='F03' or substr(b(i),2,3) in ('G30') or substr(b(i),2,4) in ('F051', 'G311') then dement=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn. (lpr2)*/
do i = 1 to 150;
if 'F00'<=substr(q(i),2,3)<='F03' or substr(q(i),2,3) in ('G30') or substr(q(i),2,4) in ('F051', 'G311') then dement=1;
drop i;
end;
run;
proc sql;
create table dement as select cpr_encrypted, (max (dement)) as dement from lprdement group by cpr_encrypted;
quit;
/* merger samtlige komorbiditeter i en fil */
data lprkomorb;
merge PVD rheumatologisk lungesyg IHD HF DMkomp DMukomp cancer2 cancer3 stroke livermild livermodsev nyre hiv peptic plegi dement ils bronk;
by CPR_encrypted;
run;
/* ikke som i charlson - men tilføjer ILS og merger nogle af de mindre sygdomme i denne kohorte */
data lprkomorb2;
set lprkomorb;
if plegi=1 or stroke=1 then stroketot=1;
if livermild=1 or livermodsev=1 then liver=1;
if dmukomp=1 or dmkomp=1 then dm=1;
if lungesyg=1 or ils=1 then lungetot=1;
if stroketot=1 or hf=1 or IHD=1 or pvd=1 then cardio=1;
if missing(stroketot) then stroketot=0;
if missing(liver) then liver=0;
if missing(dm) then dm=0;
if missing(lungetot) then lungetot=0;
if missing (cardio) then cardio=0;
run;
/* laver perm fil samt renamer CPR variabel sv.t. øvr. filer*/
/* SÆT TAL i set fil navn */
data perm.lpr23charlson;
set lprkomorb2;
run;
data perm.lpr23charlson;
set perm.lpr23charlson;
data lpr23popfinal;
merge perm.lpr23charlson perm.cancer_eks_lpr_rigtig perm.cancer_eks_lpr3_rigtig perm.bloed_eks;
by cpr_encrypted;
if cancerslet3=1 then delete;
if cancerslet2=1 then delete;
if bloed=1 then delete;
run;
data perm.lpr23popfinal;
set lpr23popfinal;
drop cancerslet2 cancerslet3 bloed;
run;
/* Der er fjernet 3439 fra lpr2. Lpr3: 4052 - i alt er der nu 5376, som er fjernet. */
data lpr3pop; set perm.lpr_2_3; run;
proc sort data=lpr3pop;
by cpr_encrypted;
run;
/*GI blødning: K920-22*/
data lprGIblod; set perm.d6; GIblod=0;
array p {3} p1-p3; /* aa-diagn.*/
do i = 1 to 3;
if substr(p(i),2,4) in ('K920', 'K921', 'K922') then GIblod=1;
drop i;
end;
run;
data gieks; gieks=0;
set LPRGIblod;
if GIblod=1 and Covid_samp_date<Starttidspunkt+(1*365.25) then do GIeks=1; end;
run;
proc sql;
create table GIblod as select cpr_encrypted, (max (gieks)) as gieks from gieks group by cpr_encrypted;
quit;
proc freq data=giblod;
tables gieks;
run;
/*Vaginal blødning: N930, N938, N939*/
data lprvaginal; set perm.d6; vaginalblod=0;
array p {3} p1-p3; /* aa-diagn.*/
do i = 1 to 3;
if substr(p(i),2,4) in ('N930', 'N938', 'N939') then vaginalblod=1;
drop i;
end;
run;
data vageks; vageks=0;
set lprvaginal;
if vagnialblod=1 and Covid_samp_date<Starttidspunkt+(1*365.25) then do vageks=1; end;
run;
proc sql;
create table vaginal as select cpr_encrypted, (max (vageks)) as vageks from vageks group by cpr_encrypted;
quit;
proc freq data=vageks;
tables vageks;
run;
/*Vaginal blødning: */
/*Hæmauturi: R319A*/
data lprhaemuturi; set perm.d6; uturi=0;
array p {3} p1-p3; /* aa-diagn.*/
do i = 1 to 3;
if substr(p(i),2,5) in ('R319A') then uturi=1;
drop i;
end;
run;
data uturieks; uturieks=0;
set lprhaemuturi;
if uturi=1 and Covid_samp_date<Starttidspunkt+(1*365.25) then do uturieks=1; end;
run;
proc sql;
create table uturi as select cpr_encrypted, (max (uturieks)) as uturieks from uturieks group by cpr_encrypted;
quit;
proc freq data=lprhaemuturi;
tables uturi;
run;
/*Hæmaturi: 1872*/
/*Hæmoptyse mm: R040-42, 38, 49 */
data optyselpr; set perm.d6; optyse=0;
array p {3} p1-p3; /* aa-diagn.*/
do i = 1 to 3;
if substr(p(i),2,4) in ('R040', 'R042', 'R041', 'R038', 'R049') then optyse=1;
drop i;
end;
run;
data optyseeks; optyseeks=0;
set optyselpr;
if optyse=1 and Covid_samp_date<Starttidspunkt+(1*365.25) then do optyseeks=1; end;
run;
proc sql;
create table optyse as select cpr_encrypted, (max (optyseeks)) as optyseeks from optyseeks group by cpr_encrypted;
quit;
proc freq data=optyse;
tables optyseeks;
run;
/*Cerebral Hæmoragi: I62-61*/
data lprhaemoragi; set perm.d6; haemoragi=0;
array p {3} p1-p3; /* aa-diagn.*/
do i = 1 to 3;
if substr(p(i),2,4) in ('I610', 'I611', 'I612' ,'I613', 'I614', '615', 'I616', 'I615', 'I616', 'I618' ,'I619', 'I620', 'I621', 'I629') then haemoragi=1;
drop i;
end;
run;
data haemoragieks; haemoragieks=0;
set lprhaemoragi;
if haemoragi=1 and Covid_samp_date<Starttidspunkt+(1*365.25) then do haemoragieks=1; end;
run;
proc sql;
create table haemoragi as select cpr_encrypted, (max (haemoragieks)) as haemoragieks from haemoragieks group by cpr_encrypted;
quit;
proc freq data=haemoragi;
tables haemoragieks;
run;
/*Okulær blødning: H313*/
data lproku; set perm.d6; oku=0;
array p {3} p1-p3; /* aa-diagn.*/
do i = 1 to 3;
if substr(p(i),2,4) in ('H313') then oku=1;
drop i;
end;
run;
data okueks; okueks=0;
set lproku;
if oku=1 and Covid_samp_date<Starttidspunkt+(1*365.25) then do okueks=1; end;
run;
proc sql;
create table oku as select cpr_encrypted, (max (okueks)) as okueks from okueks group by cpr_encrypted;
quit;
proc freq data=lproku;
tables oku;
run;
data perm.bloedning;
merge oku haemoragi optyse uturi vaginal GIblod;
by CPR_encrypted;
run;
proc freq data=perm.bloedning;
tables okueks haemoragieks optyseeks uturieks vageks GIeks ;
run;
data bloed_eks; bloed=0;
set perm.bloedning;
if okueks=1 then bloed=1;
if haemoragieks=1 then bloed=1;
if optyseeks=1 then bloed=1;
if uturieks=1 then bloed=1;
if vageks=1 then bloed=1;
if GIeks=1 then bloed=1;
run;
data perm.bloed_eks;
set bloed_eks;
drop okueks haemoragieks optyseeks uturieks vageks GIeks;
run;
proc freq data=perm.bloed_eks;
tables bloed ;
run;
/*tager kun primær diagnoser med (fil fra lpr3 udtræk)- LPR3/*/
data lpr3pop; set perm.lpr_2_3; run;
proc sort data=lpr3pop;
by cpr_encrypted;
run;
/**mekanisk klap Z952**/
data mekanisk; set lpr3pop; mekanisk=0;
array b {24} b1-b24; /* b-diagn.*/
do i = 1 to 17;
if substr(b(i),2,4) in ('Z952') then mekanisk=1;
drop i;
end;
array a {3} a1-a3; /* aa-diagn.*/
do i = 1 to 3;
if substr(a(i),2,4) in ('Z952') then mekanisk=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn.(lpr2)*/
do i = 1 to 150;
if substr(q(i),2,4) in ('Z952') then mekanisk=1;
drop i;
end;
run;
proc sql;
create table mekanisk1 as select cpr_encrypted, (max (mekanisk)) as mekanisk from mekanisk group by cpr_encrypted;
quit;
proc freq data=mekanisk1;
tables mekanisk;
run;
/*DVT I802*/
data DVT; set lpr3pop; DVT=0;
array b {24} b1-b24; /* b-diagn.*/
do i = 1 to 17;
if substr(b(i),2,4) in ('I802') then DVT=1;
drop i;
end;
array a {3} a1-a3; /* aa-diagn.*/
do i = 1 to 3;
if substr(a(i),2,4) in ('I802') then DVT=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn.(lpr2)*/
do i = 1 to 150;
if substr(q(i),2,4) in ('I802') then DVT=1;
drop i;
end;
run;
proc sql;
create table DVT1 as select cpr_encrypted, (max (DVT)) as DVT from DVT group by cpr_encrypted;
quit;
proc freq data=DVT1;
tables DVT;
run;
/*lunge emboli I269 + I260*/
data LE; set lpr3pop; LE=0;
array b {24} b1-b24; /* b-diagn.*/
do i = 1 to 17;
if substr(b(i),2,4) in ('I269','I260') then LE=1;
drop i;
end;
array a {3} a1-a3; /* aa-diagn.*/
do i = 1 to 3;
if substr(a(i),2,4) in ('I269','I260') then LE=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn.(lpr2)*/
do i = 1 to 150;
if substr(q(i),2,4) in ('I269','I260') then LE=1;
drop i;
end;
run;
proc sql;
create table LE1 as select cpr_encrypted, (max (LE)) as LE from LE group by cpr_encrypted;
quit;
proc freq data=LE1;
tables LE;
run;
/* D686 Anden trombofilli (antifosfolipidsyndrom)*/
data tromb; set lpr3pop; tromb=0;
array b {24} b1-b24; /* b-diagn.*/
do i = 1 to 17;
if substr(b(i),2,4) in ('D686') then tromb=1;
drop i;
end;
array a {3} a1-a3; /* aa-diagn.*/
do i = 1 to 3;
if substr(a(i),2,4) in ('D686') then tromb=1;
drop i;
end;
array q {150} q1-q150; /* q-diagn.(lpr2)*/
do i = 1 to 150;
if substr(q(i),2,4) in ('D686') then tromb=1;
drop i;
end;
run;
proc sql;
create table tromb1 as select cpr_encrypted, (max (tromb)) as tromb from tromb group by cpr_encrypted;
quit;
proc freq data=tromb1;
tables tromb;
run;
data tromber;
merge tromb1 LE1 DVT1 mekanisk1;
by CPR_encrypted;
run;
data tromber1; VTE=0;
set tromber;
if LE=1 then VTE=1;
if DVT=1 then VTE=1;
run;
data perm.tromber2;
set tromber1;
drop LE DVT;
run;
/*
proc freq data=perm.tromber;
tables tromber;
run;
*/
/* laver lokal kopi af ovd_ssi_overvaagning og sorterer efter CPR nummer */
data covidmikr;
set in05614.ovd_ssi_overvaagningsdata;
run;
proc sort data=covidmikr;
by CPR_ENCRYPTED;
run;
/* ekskluderer data efter studie slut */
data covidmikr2;
set covidmikr;
if SAMPLEDATE>'06NOV2021'd then delete;
run;
/* omdøber variabler og giver labels sv.t. variabel */
data covidmikr3;
set covidmikr2;
rename CASEDEFINITION=covid19 CPR_dateofdeath=CPR_coviddeath EPILPRFIRSTADM=COVID_indl_12h EPILPRICU_IN=COVID_indl_icu SAMPLEDATE=COVID_SAMP_DATE;
run;
data covidmikr4;
set covidmikr3;
label covid19="COVID19"
CPR_coviddeath="CPR_coviddeath"
COVID_indl_12h="COVID_indl_12h"
COVID_indl_icu="COVID_indl_icu"
COVID_SAMP_DATE="COVID_SAMP_DATE";
run;
data covidmikr5;
set covidmikr4;
drop covid19_enddate;
run;
/* laver perm kopi samt omarrangerer */
data perm.covidpositive;
retain CPR_encrypted covid19 covid19_status CPR_coviddeath COVID_indl_12h COVID_indl_icu;
set covidmikr5;
run;
/*Hvad skal gøres efter lægemiddelopkysnigner og LMS er merget?*/
libname perm 'F:\Projekter\FSEID00005614\Sarahdata';
/*Trækker data ud fra LMS_lægemiddeloplysninger, som bagefter skal merges med LMS_epikur, mangler at kun beholde VNR, packsize, packtext og ATC*/
data oplysninger_eli;
if ATC="B01AF02" THEN OUTPUT;
set in05614.lms_laegemiddeloplysninger;
run;
data oplysninger_lix;
if ATC="B01AF03" THEN OUTPUT;
set in05614.lms_laegemiddeloplysninger;
run;
data oplysninger_xarel;
if ATC="B01AF01" THEN OUTPUT;
set in05614.lms_laegemiddeloplysninger;
run;
data oplysninger_prad;
if ATC="B01AE07" THEN OUTPUT;
set in05614.lms_laegemiddeloplysninger;
run;
/*Marevan*/
data oplysninger_mar;
if ATC="B01AA03" THEN OUTPUT;
set in05614.lms_laegemiddeloplysninger;
run;
/*Merger med oplysninger*/
proc sort data=oplysninger_eli;
by vnr;
run;
proc sort data=oplysninger_lix;
by vnr;
run;
proc sort data=oplysninger_prad;
by vnr;
run;
proc sort data=oplysninger_xarel;
by vnr;
run;
proc sort data=oplysninger_mar;
by vnr;
run;
/* Merger oplysninger med hinanden*/
data DOAK_oplysninger;
merge oplysninger_eli oplysninger_lix oplysninger_prad oplysninger_xarel oplysninger_mar ;
by vnr;
keep VNR packsize packtext ATC;
run;
Data
/*Trækker data ud fra epikur*/
/*Eliquis*/;
data lmsepikur_eli;
if ATC="B01AF02" THEN OUTPUT;
set in05614.lms_epikur;
drop doso indo;
run;
*/lixiana;
data lmsepikur_lix;
if ATC="B01AF03" THEN OUTPUT;
set in05614.lms_epikur;
drop doso indo;
run;
*/Xarelto;
data lmsepikur_xarel;
if ATC="B01AF01" THEN OUTPUT;
set in05614.lms_epikur;
drop doso indo;
run;
*/Pradaxa;
data lmsepikur_prad;
if ATC="B01AE07" THEN OUTPUT;
set in05614.lms_epikur;
drop doso indo;
run;
data lmsepikur_mar;
if ATC="B01AA03" THEN OUTPUT;
set in05614.lms_epikur;
drop doso indo;
run;
*/Merger epikurr med hinanden;
proc sort data=lmsepikur_eli;
by CPR_encrypted;
run;
proc sort data=lmsepikur_lix;
by CPR_encrypted;
run;
proc sort data=lmsepikur_prad;
by CPR_encrypted;
run;
proc sort data=lmsepikur_xarel;
by CPR_encrypted;
run;
proc sort data=lmsepikur_mar;
by CPR_encrypted;
run;
data perm.LMSAK;
merge lmsepikur_eli lmsepikur_lix lmsepikur_prad lmsepikur_xarel lmsepikur_mar;
by CPR_encrypted;
run;
/* proc sort efter VNR, da merge med lægemiddeloplysninger*/
proc sort data=perm.LMSAK;
by VNR;
run;
data perm.LMS_epikur_oplysn;
merge perm.lmsak DOAK_oplysninger;
by vnr;
run;
*/HAR ENDNU IKKE MERGET NED COVID*/
/* Merger lms_epikur med covidpositive*/
GAMMEL:
Data LMS_epikur;
set in05023.lms_epikur;
run;
proc sort data=Lms_epikur;
by Cpr_encrypted;
run;
Data Covidpositive;
set perm.covidpositive;
run;
proc sort data=covidpositive;
by Cpr_encrypted;
run;
data perm.covid_lms;
merge covidpositive lms_epikur;
by CPR_encrypted;
run;
* ekskludere patienter med pågældende event */
/* Definere event */
/* identificere relevant medicin for event - sætte alle datoer for recepter for enkelt medikament(gruppe?) op på én række variable "eliquis1, eliquis2, eliquis3" (som gruppe fx ak1, ak2, ak3 - kald evt grupperne af medicin hvilken diagnose de er til) etc */
/* søge om event sker på datoerne */;
libname perm 'F:\Projekter\FSEID00005614\Sarahdata'; run;
data Covid;
set perm.covidpositive;
run;
proc sort data=covid; by cpr_encrypted;
run;
data testdoak;
set perm.lms_epikur_oplysn;
run;
proc sort data=testdoak; by cpr_encrypted;
run;
data testdoak2; dummy=1;
set testdoak;
if EKSD<='31DEC2018'd then delete; run;
proc sql;
create table doak as
select cpr_encrypted, atc, vnr, eksd, apk, packsize, sum(dummy) as antalpak
from testdoak2
group by cpr_encrypted, vnr, eksd;
quit;
proc sort data=doak out=perm.doak nodupkey;
by cpr_encrypted vnr eksd;
run;
proc sort data=testdoak2 nodupkey dupout=doakdup; by cpr_encrypted; run;
proc sort data=test; by cpr_encrypted; run;
data test2;
merge perm.doak (in=a) covid;
by cpr_encrypted;
if a;
run;
data test3;
set test2;
format EKSPSLUT date9.;
EKSPSLUT = intnx('day',EKSD,(packsize*antalpak*APK)/2));
run;
data test3;
set test2;
format EKSPSLUT date9.;
if ATC = 'B01AF03' then EKSPSLUT = intnx('day',EKSD,((packsize*antalpak*APK)/1));
if ATC = 'B01AF01' then EKSPSLUT = intnx('day',EKSD,((packsize*antalpak*APK)/1));
if ATC = 'B01AF02' then EKSPSLUT = intnx('day',EKSD,((packsize*antalpak*APK)/2));
if ATC = 'B01AE07' then EKSPSLUT = intnx('day',EKSD,((packsize*antalpak*APK)/2));
run;
data test4; doakcov=0;
set test3;
if EKSD<COVID_SAMP_DATE<=EKSPSLUT then doakcov=1;
run;
proc freq data=test4 nlevels;
tables doakcov;
run;
data Perm.DOAK_Covid_Positiv;
set test4;
if doakcov=1 then output;
run;
/*der er duplikater - disse fjernes:*/
data
proc sort data=perm.DOAK_covid_positiv out=DOAK_covid_positiv_1 nodupkey;
by cpr_encrypted;
run;
data perm.DOAK_covid_positiv_1;
set Doak_covid_positiv_1;
by cpr_encrypted;
run;
/*Marivan ATC="B01AA03"/*
Dosis for hver pt skal bestemmes
/*Tage tre recepter, og dividerer det med antallet af piller = finde dosis for pt. Derefter tjekke om nogle recepter overlapper med covid positiv test.
Ideen: at lave alle eksd til variabler, for derefter at tage de tre første variable og regne gennemsnittet på disse*/
Data mar;
set perm.lms_epikur_oplysn;
if ATC="B01AA03" then output;
run;
proc sort data=mar;
by cpr_encrypted;
run;
/*Virker ikke!*/
/*lægger det i samme variabel, så ikke helt det vi har brug for!!
data mar1;
set mar;
by cpr_encrypted;
length EKSD1 $4000.;
retain EKSD1;
if first.cpr_encrypted then call missing(EKSD1);
if not index(EKSD1,trim(EKSD)) then call catx(', ', EKSD1,, EKSD);
if last.CPr_encrypted then output;
run;
========================================= MACRO ===========================
Prøver Macro - fra diagnose udtræk*/;
/*mar=lpr3diag_b, højeste recept 318*/
proc sort data=mar;
by cpr_encrypted eksd;
run;
/* hvilke packsizes: wafarin findes kun i pakker med 100 styks (undtagen 4 obs*/
data mar_packsize;
set mar;
if packsize=100 then output;
run;
data lpr3sbd_btael; set mar;
by cpr_encrypted;
if first.cpr_encrypted then diag_count= 0;
diag_count+1;
run;
proc freq data=lpr3sbd_btael;
tables diag_count;
title 'b-count';
run;
/* laver én variabel pr kode cpr */
* asdasdsadasdsadasdasdasdaslllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllldasd
VIRKER - MEN KAN EVT. OPTIMERES DA DEN ER LANGSOM VED MANGE VARIABLER
* asdasdsadasdsadasdasdasdaslllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllldasd
;
%macro diagvandret (dtyp,antalfra, antaltil);
%DO i = &antalfra %TO &antaltil;
%let d=&dtyp&i.;
data lpr3_&d. (keep=cpr_encrypted packsize apk &d); set lpr3sbd_&dtyp.tael;
if diag_count=&i then &d=eksd;
if diag_count=&i then output;
run;
proc sort data=lpr3_&d.;
by cpr_encrypted;
run;
%end;
%DO j = &antalfra %TO &antaltil;
data lpr3komorb&dtyp.&antaltil;
merge lpr3_&dtyp.&antalfra - lpr3_&dtyp&&j.;
by cpr_encrypted;
run;
%end;
%DO u = &antalfra %TO &antaltil;
proc datasets lib=work nolist;
delete lpr3_&dtyp&&u.;
quit;
run;
%end;
%mend;
%diagvandret(b,1,20) /* filens endelige output vil hedde: lpr3komorbb20 (b pga diagtype b, 20 pga antal obs 20) */
%diagvandret(b,21,40)
%diagvandret(b,41,60)
%diagvandret(b,61,80)
%diagvandret(b,81,100)
%diagvandret(b,101,120)
%diagvandret(b,121,140)
%diagvandret(b,141,200)
%diagvandret(b,201,318)
data perm.mar_recept;
merge lpr3komorbb20 lpr3komorbb40 lpr3komorbb60 lpr3komorbb80 lpr3komorbb100 lpr3komorbb120 lpr3komorbb140 lpr3komorbb200 lpr3komorbb318;
by cpr_encrypted;
run;
/*bestemmer dosis pr cpr. Skal der tages 3 el.4 recepter? Lige nu er det 3! */
data dosis;
set perm.mar_recept;
dosis=(packsize*APK)/(b3-b1);
run;
/*merger med tidligere marivan fil efter at have fundet dosis*/
proc sort data=dosis;
by cpr_encrypted;
run;
data dosis1;
set dosis;
keep dosis cpr_encrypted;
run;
data dosis_mar;
merge mar dosis1;
by cpr_encrypted;
run;
/*gennemsnnit for dosis til dem som der ikke er dosis for.*/
proc means data=dosis_mar noprint nway;
var dosis;
output
out=dosis_gns(drop=_type_ _freq_)
mean=;
run;
/*Gennemsnit på dosis er 1,606*/
data dosis_mar1;
set dosis_mar;
if dosis=. then dosis=1.606;
run;
*/merger dosis med covid*/;
data marcov;
merge dosis_mar1 (in=a) covid;
by cpr_encrypted;
if a;
run;
data marcov1;
set marcov;
format EKSPSLUT date9.;
if ATC = 'B01AA03' then EKSPSLUT = intnx('day',EKSD,(packsize/dosis));
run;
data marcov2; marcov=0;
set marcov1;
if EKSD<COVID_SAMP_DATE<=EKSPSLUT then marcov=1;
run;
proc freq data=marcov2 nlevels;
tables marcov;
run;
data Marcov3;
set marcov2;
if marcov=1 then output;
run;
/*der er duplikater - disse fjernes:*/
proc sort data=marcov3 out=marcov4 nodupkey;
by cpr_encrypted;
run;
*/merger med doak/*;
data mardoakcov;
merge marcov4 Perm.DOAK_Covid_Positiv_1;
by cpr_encrypted;
run;
/*laver ny ak-bahndling variabel med både doak og marevan.*/
data perm.mardoakcov;
set mardoakcov;
if marcov=1 then akcov=1;
if doakcov=1 then akcov=1;
run;
proc freq data=perm.mardoakcov nlevels;
tables akcov;
run;
*/Få merget covid med død fra CPR
--- Her har vi død med dato (d-status-hean?) og C status . Her skal kun trækkes dem der er i den første som egentlig er døde. Derudover censurdato.
--- LPR: indlæggelser -> indtid og udtid -> her skal vi keep udtid - indtid > 12 h. Dette definerer indlæggelse./*;
/*laver ny variabel med død og */
data Person_status;
set in05614.CPR3_T_Person;
run;
Data Person_status1;
set Person_status;
format Doed date9.;
format Ud_CPR_Dato date9.;
if C_status=90 then Doed = D_status_hen_start;
if C_status=50 then Ud_CPR_Dato = D_status_hen_start;
if C_status=60 then Ud_CPR_Dato = D_status_hen_start;
if C_status=70 then Ud_CPR_Dato = D_status_hen_start;
if C_status=80 then Ud_CPR_Dato = D_status_hen_start;
if C_status=20 then Ud_CPR_Dato = D_status_hen_start;
if C_status=30 then Ud_CPR_Dato = D_status_hen_start;
run;
/*omdøber CPR_encrypted*/
Data Person_status2;
set Person_status1;
rename V_PNR_ENCRYPTED=CPR_ENCRYPTED;
run;
data Person_status3;
set Person_status2;
Label Cpr_encrypted = "CPR_encrypted";
run;
proc sort data=Person_status3;
by CPR_encrypted;
run;
*/Merger med covid*/;
data perm.Personstatus_covid;
merge person_status3 perm.covidpositive;
by Cpr_encrypted;
run;
data Personstatus_covid1;
set perm.personstatus_covid;
endfollowup=covid_samp_date+14;
run;
data Personstatus_covid2;
set Personstatus_covid1; coviddoed=0;
if Covid_samp_date=<doed<=endfollowup then coviddoed=1;
if Covid_samp_date=<doed<=endfollowup then coviddoeddato=doed;
run;
Data PSC3;
Set Personstatus_covid2;
Eventdato_doed=endfollowup;
if not missing(coviddoeddato) then eventdato_doed=coviddoeddato;
if Covid_samp_date=<ud_cpr_dato<=endfollowup then eventdato_doed=ud_cpr_dato;
run;
data PSC4;
set PSC3;
Timetoevent_doed=eventdato_doed-covid_samp_date;
run;
/* merger med de patienter der får doak og marevan*/
proc sort data=perm.mardoakcov;
by CPR_encrypted;
run;
data personstatus_doak;
merge perm.mardoakcov PSC4;
by cpr_encrypted;
run;
/*LPR: indlæggelser -> indtid og udtid -> her skal vi keep udtid - indtid > 12 h. Dette definerer indlæggelse.*/
/*beholder nogle variabler*/
data LPR3;
set in05614.LPR3_SB_KONTAKT;
keep hovedspeciale personnummer_encrypted sluttidspunkt starttidspunkt;
run;
/*omdøber CPR_encrypted*/
Data LPR3_1;
set LPR3;
rename personnummer_encrypted=CPR_ENCRYPTED;
run;
data LPR3_2;
set LPR3_1;
Label Cpr_encrypted = "CPR_encrypted";
run;
data LPR3_3;
set LPR3_2;
Indlaeggelsestid=sluttidspunkt-starttidspunkt;
run;
/******Finder covidpositiv test indenfor en indlæggelse, skal først merge med covid********************************************************************************************/
/*Først hvilken som helst indlæggelse*/
proc sort data=LPR3_3;
by cpr_encrypted;
run;
data test_indlaeggelse;
merge personstatus_doak (in=a) LPR3_3;
by cpr_encrypted; if a;
run;
data test_indlaeggelse1;
set test_indlaeggelse;
STARTTIDSPUNKT = datepart(starttidspunkt);
format STARTTIDSPUNKT DATE7.;
SLUTTIDSPUNKT = datepart(sluttidspunkt);
format SLUTTIDSPUNKT DATE7.;
run;
data test_indlaeggelse2;
set test_indlaeggelse1;
indl_test_alt=0;
If STARTTIDSPUNKT=<Covid_samp_date=<SLUTTIDSPUNKT then indl_test_alt=1;
Run;
proc freq data=test_indlaeggelse2;
tables indl_test_alt;
run;
data Ind_test_alt;
set test_indlaeggelse2;
keep CPR_encrypted indl_test_alt;
if indl_test_alt=1 then output;
run;
proc sort data=ind_test_alt out=ind_test_alt1 nodupkey;
by CPR_encrypted indl_test_alt;
run;
/*1230 indlæggelser*/
/*** indlæggelser over 4 timer****//;
Data test_indlaeggelse3;
set test_indlaeggelse;
if hour(timepart(Indlaeggelsestid))>4 then output;
run;
data test_indlaeggelse4;
set test_indlaeggelse3;
STARTTIDSPUNKT = datepart(starttidspunkt);
format STARTTIDSPUNKT DATE7.;
SLUTTIDSPUNKT = datepart(sluttidspunkt);
format SLUTTIDSPUNKT DATE7.;
run;
data test_indlaeggelse5;
set test_indlaeggelse4;
indl_test_4=0;
If STARTTIDSPUNKT=<Covid_samp_date=<SLUTTIDSPUNKT then indl_test_4=1;
Run;
proc freq data=test_indlaeggelse5;
tables indl_test_4;
run;
data Ind_test_4;
set test_indlaeggelse5;
keep CPR_encrypted indl_test_4;
if indl_test_4=1 then output;
run;
proc sort data=ind_test_4 out=ind_test_4_1 nodupkey;
by CPR_encrypted indl_test_4;
run;
/**896 indlæggelser**/
/*indlæggelser over 12 timer:***/
Data test_indlaeggelse6;
set test_indlaeggelse;
if hour(timepart(Indlaeggelsestid))>12 then output;
run;
data test_indlaeggelse7;
set test_indlaeggelse6;
STARTTIDSPUNKT = datepart(starttidspunkt);
format STARTTIDSPUNKT DATE7.;
SLUTTIDSPUNKT = datepart(sluttidspunkt);
format SLUTTIDSPUNKT DATE7.;
run;
data test_indlaeggelse8;
set test_indlaeggelse7;
indl_test_12=0;
If STARTTIDSPUNKT=<Covid_samp_date=<SLUTTIDSPUNKT then indl_test_12=1;
Run;
proc freq data=test_indlaeggelse8;
tables indl_test_12;
run;
data Ind_test_12;
set test_indlaeggelse8;
keep CPR_encrypted indl_test_12;
if indl_test_12=1 then output;
run;
proc sort data=ind_test_12 out=ind_test_12_1 nodupkey;
by CPR_encrypted indl_test_12;
run;
/*626 indlæggelser*/
/*merger alle tre test inlæggelser*/
Proc sort data=Ind_test_12_1;
by cpr_encrypted;
run;
Proc sort data=Ind_test_4_1;
by cpr_encrypted;
run;
Proc sort data=Ind_test_alt1;
by cpr_encrypted;
run;
data test_ind;
merge Ind_test_12_1 Ind_test_4_1 Ind_test_alt1;
by cpr_encrypted;
run;
proc sort data=test_ind;
by cpr_encrypted;
run;
/*Dette merges med outcome datasæt*/
/****************************xx**************************************************************************************************************/
/*Definerer at indlæggelse skal være over 12 timer*/;
Data LPR3_5;
set LPR3_3;
if hour(timepart(Indlaeggelsestid))>12 then output;
run;
proc sort data=LPR3_5;
by cpr_encrypted;
run;
/*Merger med personstatus_doak*/
data personstatus_doak_indlaeggelse0;
merge personstatus_doak (in=a) LPR3_5;
by cpr_encrypted; if a;
run;
/*omdanner starttid til dato uden tid*/;
data personstatus_doak_indlaeggelse1;
set personstatus_doak_indlaeggelse0;
STARTTIDSPUNKT = datepart(starttidspunkt);
format STARTTIDSPUNKT DATE7.;
run;
/*definerer indæggelse med hensynstagen til død som vi har gjort det for ITA!*/
data indl; set personstatus_doak_indlaeggelse1; indlaeggelse=0; tt_indlaeggelse=14;
if not missing(STARTTIDSPUNKT) then indlall=1;
if not missing(doed)=1 and (COVID_SAMP_DATE<=doed<=endfollowup) then tt_indlaeggelse=(doed-COVID_SAMP_DATE);
if not missing(doed)=1 and (COVID_SAMP_DATE<=doed<=endfollowup) then indlaeggelse=2; /* død for indlæggelse */
if indlall=1 AND (0<=STARTTIDSPUNKT-COVID_SAMP_DATE<=tt_indlaeggelse) then tt_indlaeggelse=(STARTTIDSPUNKT-COVID_SAMP_DATE);
if indlall=1 AND (0<=STARTTIDSPUNKT-COVID_SAMP_DATE<=tt_indlaeggelse) then indlaeggelse=1;
run;
data kun_indl; keep cpr_encrypted indlaeggelse tt_indlaeggelse;
set indl;
if indlaeggelse=0 then delete;
run;
proc sort data=kun_indl; by cpr_encrypted tt_indlaeggelse; run;
data perm.kun_indl_outc;
set kun_indl;
by cpr_encrypted;
if first.cpr_encrypted then output;
run;
proc freq data=perm.kun_indl_outc;
tables indlaeggelse;
run;
/* gammel kode til indlæggelser
data data4; set personstatus_doak_indlaeggelse1; indlaeggelse=0; tt_indlaeggelse=14; dod_indlaeggelse=0;
if doed=1 and (0<=D_STATUS_HEN_START-COVID_SAMP_DATE)<=tt_indlaeggelse then do tt_indlaeggelse=(D_STATUS_HEN_START-COVID_SAMP_DATE);
indlaeggelse=0; dod_indlaeggelse=1; end;
if 0 <= (STARTTIDSPUNKT-COVID_SAMP_DATE)<=tt_indlaeggelse then do tt_indlaeggelse=(STARTTIDSPUNKT-COVID_SAMP_DATE); indlaeggelse=1; end;
run;
/* sorterer efter både cpr og indlæggelse, således at duplikater af indlæggelse - samme patient som har rykket afleding/blevet indlagt flere gange - bliver slettet og kun første indlæggelse tæller*/
/*proc sort data=data4 out=PDI_sorteret;
by CPR_encrypted tt_indlaeggelse;
run;
proc sort data=PDI_sorteret nodupkey;
by CPR_encrypted;
run;
proc freq data=pdi_sorteret;
tables indlaeggelse;
run;
/*definerer indlæggelse=1 hvis de bliver indlagt inden for 14 dage*/
/*Fjerner variable vi ikke længere er interreseret i*/
/*
data PDI2;
set PDI_sorteret;
drop ATC VNR EKSD PACKSIZE antalpak COVID19_status CPR_coviddeath C_status EKSPSLUT ;
run;
/*DOAK missing values bliver til 0*//*
data PDI3;
set PDI2;
if doakcov= 'missing value' then doakcov=0;
if marcov= 'missing value' then marcov=0;
if akcov= 'missing value' then akcov=0;
run;
/*tilføjer alder variabel*//*
data PDI4;
set PDI3;
format D_FODDATO date9.;
run;
/* Her kunne man sætte det til at hvis mna er død er det minus dødsdato?*/
/*data PDI5;
set PDI4;
age=int(yrdif(D_foddato,'17SEP021'd));
run;
data perm.personstatus_doak_indlaeggelse;
set PDI5;
run;
*/
*/
/*Merge med komorbiteter*/;
data komorbiteter;
set perm.lpr23popfinal;
by Cpr_encrypted;
run;
data PSIK;
merge komorbiteter (in=a) perm.personstatus_doak_indlaeggelse ;
by CPR_encrypted; if a;
run;
proc sort data=PSIK;
by cpr_encrypted;
run;
/*merger med covid positiv under indlæggelse*/
Data PSIK1;
merge PSIK (in=a)test_ind;
by CPR_encrypted;if a;
run;
* Sætter missing values i sygdomme lig nul;
data perm.AK_indlaeggelse_komorbiteter_NY;
set PSIK1;
if missing(PVD) then lprmiss=1;
if not missing(PVD) then lprmiss=0;
if missing(PVD) then pvd=0;
if missing(rheumatologisk) then rheumatologisk=0;
if missing(lungesyg) then lungesyg=0;
if missing(ils) then ils=0;
if missing(lungetot) then lungetot=0;
if missing(IHD) then ihd=0;
if missing(HF) then hf=0;
if missing(dmukomp) then dmukomp=0;
if missing(dmkomp) then dmkomp=0;
if missing(dm) then dm=0;
if missing(cancer) then cancer=0;
if missing(stroke) then stroke=0;
if missing(stroketot) then stroketot=0;
if missing(livermild) then livermild=0;
if missing(livermodsev) then livermodsev=0;
if missing(liver) then liver=0;
if missing(nyre) then nyre=0;
if missing(hiv) then hiv=0;
if missing(peptic) then peptic=0;
if missing(plegi) then plegi=0;
if missing(dement) then dement=0;
run;
data test;
set perm.AK_indlaeggelse_komorbiteter_NY;
if missing(indl_test_12) then indl_test_12=0;
run;
proc freq data=test;
tables indl_test_12*indlaeggelse;
run;
data PROCEDURER;
SET IN05614.LPR3_SB_PROCEDURER;
run;
data PROCEDURER1;
set PROCEDURER;
if kode="nabb" then output;
if kode="nabe" then output;
if kode="BGDA0" then output;
if kode="BGDA1" then output;
if kode="BJFD0" then output;
if kode="BGXA2" then output;
if kode="BFHC92" then output;
if kode="BFHC93" then output;
if kode="BFHC95" then output;
run;
proc sort data=PROCEDURER1;
by kontakt_id;
run;
/*Merger med lpr kontakt for at få cpr encrypted*/
data kontakt;
set IN05614.LPR3_SB_kontakt;
run;
proc sort data=kontakt;
by kontakt_id;
run;
data intensiv;
merge Procedurer1 (in=a) kontakt ;
by kontakt_id; if a;
run;
/*beholder nogle variable*/
data intensiv_1;
set intensiv;
keep Kode kontakt_id procedurer_id Proceduretype producerende_enhed sluttidspunkt starttidspunkt personnummer_encrypted;
run;
/*omdøber CPR_encrypted*/
Data intensiv_2;
set intensiv_1;
rename personnummer_encrypted=CPR_ENCRYPTED;
run;
data intensiv_3;
set intensiv_2;
Label Cpr_encrypted = "CPR_encrypted";
run;
/* merger med covidpositive*/
proc sort data=intensiv_3;
by cpr_encrypted;
run;
data intensiv_covid;
merge intensiv_3 (in=a) perm.covidpositive;
by cpr_encrypted; if a;
run;
*/fjerner uden cpr_encrypted*/;
data intensiv_covid1;
set intensiv_covid;
if covid19=1 then output;
run;
/*omdøber starttidspunkt*/
Data intensiv_covid2;
set intensiv_covid1;
rename Starttidspunkt=starttidspunkt_ITA sluttidspunkt=sluttidspunkt_ita;
run;
data intensiv_covid3;
set intensiv_covid2;
Label starttidspunkt_ITA = "starttidspunkt_ITA" sluttidspunkt_ita="sluttidspunkt_ITA";
run;
proc sort data=intensiv_covid3;
by cpr_encrypted;
run;
/*merger med outcome komorbiditeter dokument*/
data AK_indlaeggelse_korm;
set perm.AK_indlaeggelse_komorbiteter_ny;
by cpr_encrypted;
run;
data data;
merge AK_indlaeggelse_korm (in=a) intensiv_covid3;
by cpr_encrypted; if a;
run;
data data1;
set data;
STARTDATO_ita = datepart(starttidspunkt_ita);
format STARTDATO_ita DATE7.;
run;
/*definerer indlæggelse=1 hvis de bliver indlagt inden for 14 dage*/
data data4; set data1; ITA=0; tt_ita=14;
if not missing(STARTDATO_ITA) then itaall=1;
if not missing(doed)=1 and (COVID_SAMP_DATE<=doed<=endfollowup) then tt_ita=(doed-COVID_SAMP_DATE);
if not missing(doed)=1 and (COVID_SAMP_DATE<=doed<=endfollowup) then ita=2; /* død for ita */
if itaall=1 AND (0<=STARTDATO_ITA-COVID_SAMP_DATE<=tt_ita) then tt_ita=(STARTDATO_ITA-COVID_SAMP_DATE);
if itaall=1 AND (0<=STARTDATO_ITA-COVID_SAMP_DATE<=tt_ita) then ita=1;
run;
data kun_ita; keep cpr_encrypted ita tt_ita;
set data4;
if ita=0 then delete;
run;
proc sort data=kun_ita; by cpr_encrypted tt_ita; run;
data perm.kun_ita_outc;
set kun_ita;
by cpr_encrypted;
if first.cpr_encrypted then output;
run;
proc freq data=perm.kun_ita_outc;
tables ita;
run;
data test2;
set data4;
if itaall=1 then output;
run;
/*fjerner duplikater*/
proc sort data=Data4 out=Data5;
by CPR_encrypted tt_ita;
run;
proc sort data=Data5
dupout=data_dupli
nodupkey;
by CPR_encrypted;
run;
/* kigger på frekvens*/
proc freq data=data5;
tables indlaeggelse;
run;
/*gemmer på perm*/
data perm.outcomes_komorbiditeter_ny;
drop Kode kontakt_id procedurer_id proceduretype producerende_enhed dosis packtext itaall;
set data5;
run;
proc freq data=perm.outcomes_komorbiditeter_ny;
tables marcov;
run;
proc freq data=perm.outcomes_komorbiditeter_ny;
tables coviddoed ITA indlaeggelse;
run;
proc freq data=perm.outcomes_komorbiditeter_ny;
tables dod_ita; run;
data tal;
set perm.outcomes_komorbiditeter_ny;
If AKCOV=1 then output;
run;
proc freq data=perm.outcomes_komorbiditeter_ny;
tables ITA indlaeggelse coviddoed;
run;
/*Finder senere manglende linearitet for alder ved cox regression, derfor opdeles i aldersgrupper. */
proc univariate data=perm.outcomes_komorbiditeter_ny;
var age;
run;
data perm.outcomes_komorbiditeter_2;
set perm.outcomes_komorbiditeter_ny;
if age <20 then agegroup = 1;
if 20 <= age <30 then agegroup = 2;
if 30 <= age <40 then agegroup = 3;
if 40 <= age <50 then agegroup = 4;
if 50 <= age <60 then agegroup = 5;
if 60 <= age <70 then agegroup = 6;
if 70 <= age <80 then agegroup = 7;
if 80 <= age <90 then agegroup = 8;
if 90 <= age then agegroup = 9;
run;
proc means data=perm.outcomes_komorbiditeter_ny p25 p50 p75 qrange;
var age;
run;
data preanalyse; drop apk volapk covid19 covid_indl_12h covid19_rule covid_samp_date d_foddato d_status_hen_start ud_cpr_dato coviddoeddato eventdato_doed hovedspeciale sluttidspunkt starttidspunkt doed indlaeggelsestid indlaeggelse tt_indlaeggelse dod_indlaeggelse lprmiss sluttidspunkt_ita starttidspunkt_ita covid19_status cpr_coviddeath ita tt_ita dod_ita;
set perm.outcomes_komorbiditeter_2;
run;
proc sort data=preanalyse; by cpr_encrypted; run;
data analyse;
merge preanalyse (in=a) perm.kun_indl_outc perm.kun_ita_outc;
by cpr_encrypted;
if a;
run;
/*Tilføjer tromber som varibale*/
data analyse1;
merge analyse (in=a) perm.tromber;
by cpr_encrypted;
if a;
run;
/*tilføjer bloedningsevent*/
data analyse2;
merge analyse1 (in=a) perm.blod_outcome;
by cpr_encrypted;
if a;
run;
data analyse3;
set analyse2;
if missing(C_kon) then delete;
run;
data perm.analyse;
set analyse3;
if missing(indlaeggelse) then tt_indlaeggelse=14;
if missing(indlaeggelse) then indlaeggelse=0;
if missing(ita) then tt_ita=14;
if missing(ita) then ita=0;
if missing(COVID_blod) then tt_bloed=14;
if missing(COVID_blod) then COVID_blod=0;
run;
proc freq data=perm.analyse;
tables covid_blod;
run;
data indlaeg;
set perm.analyse;
if akcov=1 then output;
run;
proc freq data=indlaeg;
tables covid_blod;
run;
/*merger med covid fil.*/
data data1;
set in05614.lpr3_SB_kontakt;
run;
proc sort data=data1;
by personnummer_encrypted;
run;
data data2;
set perm.covidpositive;
run;
Data data3;
set data2;
rename CPR_ENCRYPTED=personnummer_encrypted;
run;
data data4;
merge data3 data1;
by personnummer_encrypted;
run;
data d5;
set data4;
STARTTIDSPUNKT = datepart(starttidspunkt);
format STARTTIDSPUNKT DATE7.;
if Covid_samp_date>starttidspunkt then delete;
run;
data d6; set d5;
rename Aktionsdiagnose=P1 personnummer_encrypted=cpr_encrypted;
run;
/* DVT: I802*/
data DVT; set perm.d6; DVT=0;
array p {3} p1-p3; /* q-diagn. (lpr2)*/
do i = 1 to 3;
if substr(p(i),2,4) in ('I802') then DVT=1;
drop i;
end;
run;
/*GI blødning: K920-22*/
data GIblod; set d6; GIblod=0;
array p {3} p1-p3; /* aa-diagn.*/
do i = 1 to 3;
if substr(p(i),2,4) in ('K920', 'K921', 'K922') then GIblod=1;
drop i;
end;
run;
data GIblod1;
set GIblod;
If GIblod=1 then output;
run;
Data GIblod2;
Set GIblod1; COVID_GIbloed=0;
if Covid_samp_date<STARTTIDSPUNKT<Covid_samp_date+(14) then COVID_GIbloed=1;
run;
proc freq data=GIblod2;
tables COVID_GIbloed;
run;
/*Vaginal*/
data vaginal; set d6; vaginalblod=0;
array p {3} p1-p3; /* aa-diagn.*/
do i = 1 to 3;
if substr(p(i),2,4) in ('N930', 'N938', 'N939') then vaginalblod=1;
drop i;
end;
run;
data vaginal1;
set vaginal;
If vaginalblod=1 then output;
run;
Data vaginal2;
Set vaginal1; COVID_vaginal=0;
if Covid_samp_date<STARTTIDSPUNKT<Covid_samp_date+(14) then COVID_Vaginal=1;
run;
proc freq data=vaginal2;
tables COVID_Vaginal;
run;
/*Hæmauturi: R319A*/
data uturi; set d6; uturi=0;
array p {3} p1-p3; /* aa-diagn.*/
do i = 1 to 3;
if substr(p(i),2,5) in ('R319A') then uturi=1;
drop i;
end;
run;
data uturi1;
set uturi;
If uturi=1 then output;
run;
Data uturi2;
Set uturi1; COVID_uturi=0;
if Covid_samp_date<STARTTIDSPUNKT<Covid_samp_date+(14) then COVID_uturi=1;
run;
proc freq data=uturi2;
tables COVID_uturi;
run;
/*hæmoptyse*/
data optyse; set d6; optyse=0;
array p {3} p1-p3; /* aa-diagn.*/
do i = 1 to 3;
if substr(p(i),2,4) in ('R040', 'R042','R041','R038' ,'R049') then optyse=1;
drop i;
end;
run;
data optyse1;
set optyse;
If optyse=1 then output;
run;
Data optyse2;
Set optyse1; COVID_optyse=0;
if Covid_samp_date<STARTTIDSPUNKT<Covid_samp_date+(14) then COVID_optyse=1;
run;
proc freq data=optyse2;
tables COVID_optyse;
run;
/*Cerebral Hæmoragi: I62-61*/
data haemoragi; set d6; haemoragi=0;
array p {3} p1-p3; /* aa-diagn.*/
do i = 1 to 3;
if substr(p(i),2,4) in ('I610','I611', 'I612' ,'I613', 'I614', '615', 'I616', 'I615' ,'I616','I618', 'I619', 'I620','I621','I629') then haemoragi=1;
drop i;
end;
run;
data haemoragi1;
set haemoragi;
If haemoragi=1 then output;
run;
Data haemoragi2;
Set haemoragi1; COVID_haemoragi=0;
if Covid_samp_date<STARTTIDSPUNKT<Covid_samp_date+(14) then COVID_haemoragi=1;
run;
proc freq data=haemoragi2;
tables COVID_haemoragi;
run;
/*Okulær blødning: H313*/
data oku; set d6; oku=0;
array p {3} p1-p3; /* aa-diagn.*/
do i = 1 to 3;
if substr(p(i),2,4) in ('H313') then oku=1;
drop i;
end;
run;
data oku1;
set oku;
If oku=1 then output;
run;
Data oku2;
Set oku1; COVID_oku=0;
if Covid_samp_date<STARTTIDSPUNKT<Covid_samp_date+(14) then COVID_oku=1;
run;
proc freq data=oku2;
tables COVID_oku;
run;
/*merger alle blødninger sammen*/
data Bloedning;
merge haemoragi2 optyse2 uturi2 vaginal2 GIblod2;
by CPR_encrypted;
run;
data Bloedning1;
set Bloedning;
keep cpr_encrypted covid_samp_date starttidspunkt COVID_haemoragi COVID_optyse COVID_uturi COVID_vaginal COVID_GIbloed;
run;
data Bloedning2;
set Bloedning1; COVID_blod=0;
if COVID_haemoragi=1 then COVID_blod=1;
if COVID_optyse=1 then COVID_blod=1;
if COVID_uturi=1 then COVID_blod=1;
if COVID_vaginal=1 then COVID_blod=1;
if COVID_GIbloed=1 then COVID_blod=1;
run;
proc freq data=Bloedning2;
tables COVID_blod;
run;
data Bloedning3;
set Bloedning2; TT_bloed=14;
if COVID_blod=1 then TT_bloed=STARTTIDSPUNKT-COVID_SAMP_DATE;
run;
data Bloedning4;
set Bloedning3;
if COVID_blod=1 then output;
run;
data bloedning5;
set Bloedning4;
keep Cpr_encrypted COVID_blod TT_bloed;
run;
Proc sort data=bloedning5;
by cpr_encrypted TT_bloed;
run;
data bloedning6;
set bloedning5;
by cpr_encrypted;
if first.cpr_encrypted then output;
run;
data perm.blod_outcome;
Set bloedning6;
run;
data outcomes_komorbiditeter; akcov1=0;
set perm.analyse;
if akcov=0 then akcov1=2; /* sætter ak som 2 og kontroller som 1 */
if akcov=1 then akcov1=1;
if akcov='' then akcov1=999;
run;
%ggBaseline2(
data=outcomes_komorbiditeter,
var=c_kon|chisq|Sex\
age|ttest|Age\
/*agegroup|chisq|Age Group\
indl|chisq|Indl\*/
/*coviddoed|chisq|Død\
/*CVD|chisq|CVD\*/
PVD|chisq|PVD\
/*gimet|chisq|gi-metabolisk (liver, peptic, dm)\*/
rheumatologisk|chisq|Rheumatology\
lungesyg|chisq|Pulmonary\
ils|chisq|ILS\
lungetot|chisq|PulmTOT\
IHD|chisq|IHD\
HF|chisq|HF\
cardio|chisq|cardio\
dmukomp|chisq|Diabetes w/o comp\
dmkomp|chisq|Diabetes w comp\
dm|chisq|DM TOT\
cancer|chisq|Cancer\
Stroke|chisq|Stroke\
Livermild|chisq|Liver - mild\
livermodsev|chisq|Liver - mod/sev\
liver|chisq|Liver TOT\
Nyre|chisq|Renal\
Marcov|chisq|Marcov\
doakcov|chisq|doakcov\
/*hiv|chisq|HIV/AIDS\*
peptic|chisq|Peptic ulcer disease\
plegi|chisq|Hemi/paraplegia\
/*stroketot|chisq|Stroke TOT\*/
dement|chisq|Dementia\
Tromber|chisq|thrombosis\
/*MTX|chisq|MTX\
Glukocort|chisq|Glukocort\
Sulfasalazin|chisq|Sulfasalazin\
Azathioprin|chisq|Azathioprin\
Leflunomid|chisq|Leflunomid\*/,
grp=akcov1,
grplabel=AK|IKKE AK,
stdiff=N,
totcol=N,
pctype=COL,
exmisspct=N,
showP=Y,
filetype=PDF,
file=F:\Projekter\FSEID00005614\Sarahdata\AKbaseline04042022,
title=BaselineData - chisq,
footnote=,
fnspace=20,
page=PORTRAIT,
deids=y
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment