Gleichzeitig Anzahl Ereignisse und Anzahl Einheiten auszählen

Werbung
News
Artikel
Foren
Join
Projekte
List
Links
Random
Über Redscope
Previous
Next
Startseite › Foren › Allgemeine Fragen zu SAS
Gleichzeitig Anzahl Ereignisse und Anzahl Einheiten auszählen
27 May, 2008 - 10:40 — thozi
Folgende Fragestellung, die sich bei der Auswertung klinischer Daten immer wieder stellt:
bei der Auszählung von Ereignissen ist oft auch die Frage interessant, in wie vielen Patienten diese
Ereignisse aufgetreten sind (z. B. adverse events). Mit proc tabulate kann ich nun entweder die
Anzahl der Ereignisse auszählen oder aber die Anzahl der Patienten, in denen diese Ereignisse
aufgetreten sind.
Meine Frage: bietet SAS eine Möglichkeit, beides gleichzeitig zu erledigen?
Viele Grüße,
Thomas Zink
----------------Foren:
Allgemeine Fragen zu SAS
Log in or register to post comments
Datenorganisation
28 May, 2008 - 12:07 — fmader
Das klingt danach als ließe es ich leicht in einem Data Step erledigen, die konkrete Umsetzung hängt
aber von der Struktur Ihrer Daten ab. Laden Sie doch bitte ein paar Beispieldatensätze Ihrer Tabelle
hoch.
Beste Grüße
F. Mader
Log in or register to post comments
Hallo,
29 May, 2008 - 09:15 — thozi
Hallo,
ein Lösung über data step habe ich mir ausgedacht, meine Frage war eher, ob es über eine
procedure auch ohne eigene Programmierung geht.
Ich füge das Makro, dass ich erstellt habe hier ein, zusammen mit ein paar Testdaten. Falls
Ihnen Verbesserungsvorschläge einfallen, so sind diese willkommen ...
MfG
Thomas Zink
--------------
/************************************************************************/
/* 7 parameters required:
*/
/* - filein: name of table to be analyzed
*/
/* - eventname: text to describe table analyzed
*/
/* - eventname: text to describe table analyzed
*/
/* - count1: variable to count events for
*/
/* - count1name: text to describe variable to count for
*/
/* - group1: variable to group events by
*/
/* - group1name: text to describe variable to group by
*/
/* - htitle: text to be used as title for output
*/
/************************************************************************/
data test;
input id Farbe $ 5. @@;
datalines;
1 blau
1 gruen
2 rot
2 rot
3 gelb
4 blau
5 rot
6 gruen
7 blau
8 blau
8 blau
9 rot
10 gelb
11 blau
12 blau
12 rot
13 gelb
14 gruen
15 rot
;
run;
%macro cnt_event_grp(filein
eventname
count1
= ,
count1name
group1
= ,
group1name
htitle
=
);
= ,
= ,
= ,
= ,
data cnt_event (keep= &count1); set &filein; run;
proc sort data=cnt_event; by &count1; run;
data cnt_event;
set cnt_event;
by &count1;
retain cnt_event_all 0 cnt_patient_all 0;
cnt_event_all = cnt_event_all + 1;
if first.&count1 then cnt_patient_all = cnt_patient_all + 1;
x = 1;
label cnt_patient_all = '# of ' &count1name ' in Total'
cnt_event_all
= '# of ' &eventname ' in Total'
;
run;
proc sort data=cnt_event; by x; run;
data cnt_event (keep= cnt_event_all cnt_patient_all);
set cnt_event; by x; if last.x;
run;
run;
proc sort data=&filein; by &group1 &count1; run;
data cnt_event_group (keep= &group1 cnt_event_group1 cnt_pat_group1);
set &filein;
by &group1 &count1;
retain cnt_event_group1 0 cnt_pat_group1 0
;
if first.&group1 then
do;
cnt_event_group1 = 0;
cnt_pat_group1 = 0;
end;
cnt_event_group1 = cnt_event_group1 + 1;
if first.&count1 then cnt_pat_group1 = cnt_pat_group1 + 1;
if last.&group1;
label cnt_pat_group1 = '# of ' &count1name ' for ' &group1name
cnt_event_group1 = '# of ' &eventname ' for ' &group1name
;
run;
data cnt_event_group;
set cnt_event_group cnt_event;
run;
proc report data=cnt_event_group headline headskip nofs;
columns &group1
cnt_event_group1 cnt_pat_group1
cnt_event_all cnt_patient_all;
define &group1
/ display;
define cnt_event_group1 / display;
define cnt_pat_group1 / display;
define cnt_event_all / display;
define cnt_patient_all / display;
title2 &htitle;
run;
%mend cnt_event_grp;
/********************************************************************END*/
%cnt_event_grp(filein
= test,
eventname = 'Farbe',
count1
= id,
count1name = 'ID',
group1
= farbe,
group1name = 'Farbe',
htitle
= 'Farbhaeufigkeit'
);
The SAS System
Farbhaeufigkeit
# of
Farbe
# of ID
12:34 Thursday, May 29, 2008
# of
Farbe
# of ID
Farbe # of ID
Farbe # of ID
for
for
in
in
Farbe
Farbe
Farbe
Total
Total
__________________________________________________
blau
gelb
gruen
rot
7
3
3
6
.
6
3
3
5
.
.
.
.
.
19
.
.
.
.
15
Log in or register to post comments
SQL
30 May, 2008 - 11:52 — fmader
Ja, die DATA Steps zur Berechnung der Anzahlen lassen sich noch etwas vereinfachen, noch
eleganter geht's in dieser konkreten Fragestellung aber vermutlich per SQL. Die beiden
Tabellen zur ungruppierten und grupperten Berechnung der Ereignis- und Patientenanzahlen
sähen dann - bezogen auf den konkreten Beispieldatensatz - so aus.
PROC SQL noprint;
CREATE TABLE cnt_event AS
SELECT
count(distinct id) AS cnt_patient_all label = "# of id in Total"
,count(id) AS cnt_event_all
FROM test
;
CREATE TABLE cnt_event_group AS
SELECT
farbe
,count(distinct id) AS cnt_pat_group1
,count(id) AS cnt_event_group1
FROM test
GROUP BY farbe
;
QUIT;
Das Untereinandersetzen der beiden Tabellen finde ich darüber hinaus ein wenig unelegant,
da die Tabellen dadurch, daß sie gänzlich unterschiedliche Variablen enthalten, eher
nebeneinandergesetzt werden, dabei aber sehr viele missing values entstehen. Wäre es hier
nicht evtl. sinnvoller, beiden Tabellen getrennt aufzuführen oder die Gesamtanzahlen
tatsächlich direkt unter die Gruppenanzahlen zu setzen und durch den Wert "Total" für die
Variable farbe zu "markieren"?
Ich hoffe, die Hinweise helfen Ihnen ein wenig weiter.
Log in or register to post comments
Verwendung von SQL
30 May, 2008 - 12:06 — thozi
Hallo Herr Mader,
vielen Dank für Ihren Kommentar und Ihren Vorschlag. Genau das habe ich mir
gewünscht: Alternativen zu meiner eigenen Vorgehensweise. Ich werde es gleich mal
ausprobieren ...
Vielen Dank,
Thomas Zink
-------------Log in or register to post comments
Herunterladen