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