Der Eingabedatensatz 'fills' wird im ersten DATA-Schritt vollständig prozedural generiert. Er hängt von keiner externen Datenquelle ab. Er dient ausschließlich als Beispiel für den PDC-Berechnungsalgorithmus.
1 Codeblock
DATA STEP Data
Erklärung : Dieser Block erstellt einen Testdatensatz namens 'fills'. Er simuliert Verschreibungsdaten für 100 Patienten, indem er eine Kennung (patientICN), ein Abgabedatum (edate), eine Behandlungsdauer (days) und ein optionales Sterbedatum (dod) zur Zensur generiert. Die Werte werden zufällig generiert, um einen realistischen Datensatz für die Demonstration zu erstellen.
Kopiert!
data fills;
length patientICN 5 dod edate days 5;
format edate date9.;
array T {5} _temporary_ (30, 30, 30, 90, 10);
do i=1 to 100;
patientICN=1000+i;
edate='01Jan2020'd + int(ranuni(0)*100);
slack=int(rand('erlang', 2)*10);
dod=.;
if ranuni(0)<0.15 then dod=edate+int(ranuni(0)*730);
do while (1);
days=T[int(ranuni(0)*dim(T)+1)];
output;
edate+max(1,int(days+rand('normal')*5))+slack;
if ranuni(0)<.05 then leave;
end;
end;
drop i;
run;
1
DATA fills;
2
LENGTH patientICN 5 dod edate days 5;
3
FORMAT edate date9.;
4
array T {5} _temporary_ (30, 30, 30, 90, 10);
5
DO i=1 to 100;
6
patientICN=1000+i;
7
edate='01Jan2020'd + int(ranuni(0)*100);
8
slack=int(rand('erlang', 2)*10);
9
dod=.;
10
IF ranuni(0)<0.15THEN dod=edate+int(ranuni(0)*730);
11
DO while (1);
12
days=T[int(ranuni(0)*dim(T)+1)];
13
OUTPUT;
14
edate+max(1,int(days+rand('normal')*5))+slack;
15
IF ranuni(0)<.05THEN leave;
16
END;
17
END;
18
drop i;
19
RUN;
2 Codeblock
PROC PRINT
Erklärung : Zeigt die ersten 30 Beobachtungen des neu erstellten Datensatzes 'fills' an. Dies ermöglicht eine schnelle visuelle Überprüfung, um sicherzustellen, dass die Testdaten korrekt generiert wurden.
Kopiert!
title 'first 50 obs of fake input data';
proc print data=fills (obs=30); run;
1
title 'first 50 obs of fake input
2
data';
3
PROC PRINT
4
DATA=fills (obs=30);
5
6
RUN;
7
3 Codeblock
PROC SORT
Erklärung : Sortiert den Datensatz 'fills' nach Patienten-ID (patientICN) und dann nach Abgabedatum (edate). Dieser Schritt ist entscheidend für die sequentielle patientenweise Verarbeitung im nächsten Berechnungsblock.
Kopiert!
proc sort data=fills; by patientICN edate; run;
1
PROC SORTDATA=fills; BY patientICN edate; RUN;
4 Codeblock
DATA STEP Data
Erklärung : Dieser Block ist das Herzstück des Algorithmus. Er liest die sortierten Daten und berechnet für jeden Patienten die Tage der Medikamentenabdeckung. Unter Verwendung der Anweisungen `first.patientICN` und `last.patientICN` initialisiert und finalisiert er die Berechnungen für jedes Individuum. Er durchläuft die Verschreibungen, 'stapelt' die Abdeckungstage und inkrementiert den Zähler für das richtige Zeitintervall. Am Ende der Daten eines Patienten berechnet er den PDC für jedes Intervall und generiert eine einzige Ausgabezeile für diesen Patienten in der Tabelle 'pdc_ptlev'.
Kopiert!
%let interv=90; * number of days in interval ;
%let ninterv=12; * number of intervals ;
data pdc_ptlev;
set fills;
by patientICN edate;
length currend 5 currpos 3 bndry 3 pdc_p1-pdc_p&ninterv 5;
retain currend currpos pdc_:;
array p {*} pdc_:;
array ends {&ninterv} _temporary_;
array D {&ninterv} _temporary_;
if first.patientICN then do;
currend=.;
currpos=1;
bndry=0;
do i=1 to dim(p);
p[i]=0;
bndry+&interv;
ends[i]=edate+bndry;
D[i]=min(&interv,max(0/(DOD>.),&interv-(ends[i]-DOD)));
end;
end;
currend=max(currend, edate);
do while (days>0);
currend+1;
days=days-1;
if currend>ends[dim(ends)] or .<dod<=currend then leave;
do while (ends[currpos]<=currend and currpos<dim(ends));
currpos+1;
end;
p[currpos]+1;
end;
if last.patientICN then do;
do i=1 to dim(p);
p[i]=p[i]/D[i];
end;
output;
end;
keep patientICN pdc_:;
format pdc_: percent8.1;
run;
Erklärung : Zeigt die ersten 30 Beobachtungen des finalen Datensatzes 'pdc_ptlev' an. Jede Zeile repräsentiert einen Patienten, und die Spalten zeigen den PDC für jedes Intervall. Die Option `heading=v` ermöglicht eine vertikale Anzeige der Überschriften für bessere Lesbarkeit.
Kopiert!
title 'first 30 obs of output -- one row/patient';
proc print data=pdc_ptlev (obs=30) heading=v width=min; run;
title;
1
title 'first 30 obs of output -- one row/patient';
2
PROC PRINT
3
DATA=pdc_ptlev (obs=30) heading=v width=min;
4
5
RUN;
6
title;
7
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.