Datensätze mit gleichem Inhalt bei einer Variable

Guten Morgen,

ich bin SAS-Anfängerin und stehe vor folgendem Problem:
Mein Datensatz enthält ca. 30.000 Beobachtungen, die neben der laufenden Nr. (Beobachtungsnummer) durch einen sog. "Barcode" gekennzeichnet sind, der wie folgt aussieht: "130000123456". Es gibt verschiedene Beobachtungen, bei denen dieser Barcode gleich ist, er tritt zweimal oder mehrmals auf. Ich will diese Beobachtungen nicht entfernen, sondern beibehalten, da es für die Auswertung wichtig ist und da es keine Doubletten sind.

Falls es hilfreich ist: neben dem Barcode kann auch eine andere Variable, die Patienten-ID, zwei- oder mehrfach vorkommen. Ich habe also in den 30.000 Beobachtungen erkrankte Personen, von denen z.B. 1.000 eine Mehrfacherkrankung haben. Diese will ich herausfinden, mit der Angabe, wie oft sie im Datensatz vorhanden sind.
Nun habe ich schon die SAS-interne Suche bemüht, aber nichts gefunden. Mir schwebt vor, dies in eine proc freq einzubauen, wenn das machbar ist, gibt es da eine Anweisung? Kurzum: ich möchte die Fälle aufgelistet haben, in denen der Barcode und/oder die Patienten-ID zwei- oder mehrmals vorkommt.

Vielen Dank & beste Grüße!

proc sql:

Hallo,

mit sql geht das sehr einfach.

proc sql;
create table ergebnis as
select *
from Datensatz
group by gleicherVariable
having count(*) > 1
;
quit;

Schöne Grüße

Jan

Re: Datensätze mit gleichem Inhalt bei einer Variable

Hallo,

ich bin sicher kein Experte von SAS-Datasets, aber ich würde es so machen:

PROC UNIVARIATE DATA = Datensatz NOPRINT ;
VAR ???;
BY Barcode;
OUTPUT OUT = d_anzahl N = anzahl ;
RUN;
DATA d_merged;
MERGE Datensatz d_anzahl ;
BY Barcode;
RUN;
DATA d_result ;
SET d_merged ;
IF anzahl > 1 ;
RUN;

Erster Schritt: in d_anzahl steht die Anzahl der Beobachtungen pro Barcode
Zweiter Schritt: In d_merged steht bei jeder Beobachtung dabei, wie oft er im Datensatz vorkommt
Dritter Schritt: In d_result stehen dann nur noch die mehrfach vorkommenden Datensätze.

Bestimmt gibt es elegantere und kürzere Lösungen. Das Beispiel ist für den Fall, dass Du genau dann bei verschiedenen Beobachtungen den gleichen Barcode hast, wenn auch die Patienten-ID übereinstimmt. Ich hatte nicht verstanden, ob Du zwei verschiedene Problemstellungen hast oder zweimal die gleiche.
Viele Grüße,

Tobias

proc freq

Moin Alexandra,

du kannst das sicherlich ganz einfach mit der proc freq lösen.
Und zwar zählt ja die freq die Häufigkeiten des auftretens.
Wenn du nun das mehrfach auftreten von Barcode und PatID filterst, verbindest du dies in deinem table statement. In etwas so:

proc freq data=ds1 noprint; tables patID*barCode / list missing out=ds2 (where=(COUNT gt 1));
proc freq data=ds2; tables patID / list; run;

Mit dieser Lösung bekommst du die patIDs, die zwei oder mehrfach vorkommen.
Liebe Grüße
Niko

Macro DUPLICAT

Hallo,
dieses Problem hatte ich bei uns so oft, dass ich einen kleinen Macro dazu gemacht habe.
Siehe in der Redscope Makro-Sammlung unter org.redscope.HansKneilmann.*, dort der Eintrag org.redscope.HansKneilmann.DUPLICAT.

Ausserdem wurde PROC SORT; mit SAS 9.1.3 erweitert um die DUPOUT= Möglichkeit:
Specify the output data set to which duplicate observations are written.
Siehe: SAS OnlineDoc, V9.1.3, dort SAS Procedures auswählen, bis SORT durchrollen und dann PROC SORT Statement wählen.

Gruß
Hans Kneilmann, Schäfer Shop GmbH (SSI)