CoDe SAS German

LesezeichenAbonnierenRSS-Feed abonnieren
mwuer
Calcite | Level 5

Hallo zusammen,

 

ich taste mich erst an die SAS Programmierung, habe daher noch zu wenig Erfahrung und hoffe auf eure Hilfe bei folgendem Problem:

 

Ich exportiere Ergebnisse die in einzelnen Spalten eine Nummer, ein Datum und einen Namen ausweisen. Bislang war es so, dass doppelt vorkommende Nummern geprüft werden. Das ältere Datum zu der Nummer wurde in eine Liste mit Dubletten und das aktuelle Datum in die Liste Daten_final ausgegeben. (siehe Code) Hierfür habe ich meine Export-Datei zuerst nach Datum sortiert und dann 

den jeweiligen Ausgabebefehl angegeben. 

 

Nun sollen die Daten nur dann als Dubletten ausgegeben werden, wenn die Nummer und der Name identisch sind. Könnt ihr mir bitte sagen, wo genau ich meinen Code hierfür anpassen muss. 

 

Vielen Dank im Voraus.

Grüße Miri

 

proc sort data=WORK.QUERY_FOR_EXPORT out=Alle_Daten;
by Nummer descending date;
run;

data Daten_final dubletten_only;
set Alle_Daten;
by Nummer descending date;
if first.Nummer and first.date then output Daten_final ; else output dubletten_only;
run;

 

 

 

4 ANTWORTEN 4
mfab
Quartz | Level 8

Hi Miri,

 

willkommen und viel Spass mit SAS! 😉 na in dem Fall müsstest Du eben schauen, dass nach Nummer und Name sortiert wird und das dann in der Ausgabe berücksichtigen.

Z.B. so:

 

proc sort data=WORK.QUERY_FOR_EXPORT out=Alle_Daten;
by Nummer Name descending date;
run;

data Daten_final dubletten_only;
set Alle_Daten;
by Nummer Name descending date;
if first.Nummer and first.Name and first.date then output Daten_final ; else output dubletten_only;
run;

Wenn Du über "Code einfügen" gehst, dann wird der Code hier im Forum auch entsprechend formatiert 😉

 

Viele Grüsse

Michael

mwuer
Calcite | Level 5

Hallo Michael,

 

danke für deine schnelle Antwort.

 

Es passt leider noch nicht ganz. Als Duplikat sollen nur diese Datensätze gewertet werden, bei denen die Nummer und der Name identisch sind. Momentan nimmt er immer den aktuellen Datensatz. 

 

Nummer    Name    Date

12              Bauer    12.5.2019; 08:55 Uhr

12              Mayer    12.5.2019; 09:05 Uhr

12              Bauer     12.5.2019; 09:10 Uhr

 

In diesem Beispiel soll z.B. erster Datensatz als Dublette und die beiden anderen in die Finale Datei ausgegeben werden. Momentan wird nur die letzte Zeile in die finale Datei geschrieben. 

 

Habe ich deinen Code falsch übertragen oder muss ich hier noch etwas anpassen.

 

Danke 🙂 

Christine2
Fluorite | Level 6

Hallo Miri,

 

es sieht aus als hättest Du bei Dir vergessen den Sort mit anzupassen. Ich persönlich liebe den Sort und hätte dein Problem komplett mit sorts gelöst.

 

proc sort data=WORK.QUERY_FOR_EXPORT out=Alle_Daten;
by Nummer Name descending date;
run;

proc sort data=alle_daten out= Neueste dupout=dupletten nodupkey;
by Nummer Name;
run;

Nodupkey sorgt dafür, dass doppelte Datensätze im Ergebnis entfernt wird. Standardmäßig ist das System so eingestellt, dass es den ersten Satz behält. Mit dem ersten Sort wird dafür gesorgt, dass das der Neueste ist.

 

Mit dupout= kannst Du Dir die entfernten Sätze in eine Datei ausgeben lassen.

 

Viel Erfolg

 

Christine

 

mwuer
Calcite | Level 5

Sehr cool. Es funktioniert. Vielen Dank euch beiden! 

 

 

sas-innovate-white.png

Missed SAS Innovate in Orlando?

Catch the best of SAS Innovate 2025 — anytime, anywhere. Stream powerful keynotes, real-world demos, and game-changing insights from the world’s leading data and AI minds.

 

Register now

Diskussionsstatistiken
  • 4 Antworten
  • 4211 Aufrufe
  • 6 Kudos
  • 3 in Unterhaltung