In SAS, wie Sie Zusammenbruch mehrere Zeilen in eine Zeile basierend auf einem ID-variable?

Die Daten, die ich arbeite, ist derzeit in der form:

 ID     Sex      Race         Drug         Dose          FillDate  
 1      M        White        ziprosidone  100mg         10/01/98     
 1      M        White        ziprosidone  100mg         10/15/98
 1      M        White        ziprosidone  100mg         10/29/98
 1      M        White        ambien       20mg          01/07/99
 1      M        White        ambien       20mg          01/14/99
 2      F        Asian        telaprevir   500mg         03/08/92
 2      F        Asian        telaprevir   500mg         03/20/92
 2      F        Asian        telaprevir   500mg         04/01/92

Und ich möchte schreiben von SQL-code, um die Daten in der form von:

 ID     Sex    Race      Drug1        DrugDose1     FillDate1_1     FillDate1_2     FillDate1_3    Drug2     DrugDose2   FillDate2_1     FillDate2_2     FillDate2_3     
 1      M      White     ziprosidone  100mg         10/01/98        10/15/98        10/29/98       ambien    20mg        01/07/99        01/14/99        null
 2      F      Asian     telaprevir   500mg         03/08/92        03/20/92        04/01/92       null      null        null            null            null

Bräuchte ich nur eine Zeile für jede eindeutige ID, die mit allen einzigartigen Medikament/Dosis/fill-info in Spalten, nicht in Zeilen. Ich vermute, es kann getan werden mit PROC TRANSPOSE, aber ich bin nicht sicher, ob die effizienteste Art und Weise zu tun, die mehrere transponiert. Ich sollte anmerken, dass ich über 50.000 unique-IDs, die jeweils mit unterschiedlichen Mengen der Medikamente, die Dosen und die entsprechenden Termine füllen. Ich würde gerne return null/empty Werte für diese Spalten, die nicht mit Daten zu füllen. Vielen Dank im Voraus.

  • Ich würde vorschlagen, diesen Aufsatz zu Lesen: sascommunity.org/wiki/...
  • Hmm, das ist ein dupe, Probleme bei der Suche eine gute doppelte Frage Kandidaten obwohl.
  • Fand ich ähnliche Beiträge, aber keine, die Adresse das Problem, dass Variablen, die umgesetzt werden muss (Medikament, Dosis, filldate) und brauchen nicht in Nationales Recht umgesetzt werden (Geschlecht, Rasse) in den gleichen Satz. Es scheint, dass es eine effizientere Methode als unsystematisch transponieren geht dann immer und immer wieder..
  • möglich, Duplikat der gibt es einen effizienten Weg zur Umsetzung der riesige Tabelle in SAS
  • doppelte ordnungsgemäß vorgeschlagen. Einige der Antworten an, dass man kann verallgemeinert werden für die Umsetzung mehrerer Variablen, ohne viel Arbeit.
  • Es ist definitiv nicht ein Duplikat dieser Frage, @user667489.
  • Ich weiß nicht, dass es eine perfekte Kopie für Sie. Vielleicht sollte jemand eine Vorlage, Transponieren, Frage, Antworten die meisten der möglichen transponieren Probleme zu schließen, Dinge zu.
  • es wäre 3 transponiert und zu einem einzigen Zusammenführen oder eine einzelne datastep sobald Sie festgestellt haben, die maximale Anzahl pro Arzneimittel pro ID.
  • Minus, die Letzte Antwort, die Sie haben eine seltsame Struktur, die eigentlich schwer zu verwenden, weiter auf. In der Tat, ich bin mir zu 99% sicher, dass exakt diese Frage wurde auf communities.sas.com aber es nicht eine Antwort gibt. Ich würde empfehlen, gegen diese Daten-Struktur, die durch die Art und Weise, wie es zu verwenden, müssen Sie eine Menge von manuellen oder makro Programmieren.
  • vielen Dank für bemerken, dass diese Frage tatsächlich sehr wichtig, Unterschiede von denen anderer transponieren Beiträge, das ist eigentlich, wo der Wert in dieser Frage ist: die Feinheiten
  • vielen Dank für das feedback. Würden Sie mir sagen, ein wenig mehr darüber, warum Sie empfehlen, gegen diese Datenstruktur? Ich don ' T nicht einverstanden mit Ihnen, ich bin nur neugierig, wie ich möchte, um zu vermeiden, potenziell unnötige manuelle/Makros Codierung downstream
  • Allgemeine Fragen, die mit Drogen-Daten: wie viele Menschen nahmen X, X&Y, X Z Dauer, X für K Länge der Zeit, die sind leichter zu beantworten, in der aktuellen form. Sie können keine arrays verwenden, um eine Schleife über das Medikament Beträge, es sei denn, Sie erklären, dass ein für jedes Medikament/Menge combo. Die verwenden Sie nur für die aktuelle form ist einfache Anzeige.

InformationsquelleAutor Justin | 2015-09-14
Schreibe einen Kommentar