Im klinischen oder Marketing-Datenmanagement trifft man häufig auf Tabellen, in denen Informationen über mehrere Spalten verteilt sind. Eine häufige Aufgabe besteht darin, zu identifizieren, welche Spalten Daten für ein bestimmtes Individuum enthalten, und dann eine zusammenfassende Liste dieser Spaltennamen in einer einzigen Variablen zu erstellen.
Dieser Artikel erklärt, wie man die Funktionen ARRAY, VNAME und CATX in SAS© verwendet, um eine "breite" Struktur in eine verkettete beschreibende Liste umzuwandeln.
Stellen wir uns einen Datensatz vor, der Patienten-IDs und mehrere Spalten für verschiedene Studien enthält (Study1ID, Study2ID, usw.). Wenn ein Patient in einer Studie eingeschrieben ist, enthält die Spalte eine ID. Andernfalls ist sie leer oder fehlt.
Eingabedaten:
| CurrentStudy | Study1ID | Study2ID | Study3ID | Study4ID |
| 001 | 180 | 780 | . | 560 |
| 002 | . | 790 | . | 520 |
| 003 | . | . | . | 231 |
Gewünschtes Ergebnis:
Wir möchten eine neue Variable erstellen (z. B. Other_enrolled_studies), die die Namen der Studien auflistet, an denen der Patient teilnimmt, getrennt durch ein Komma.
| CurrentStudy | Other_enrolled_studies |
| 001 | Study1ID, Study2ID, Study4ID |
| 002 | Study2ID, Study4ID |
| 003 | Study4ID |
Der Schlüssel zur Lösung dieses Problems liegt in der Funktion VNAME(). Im Gegensatz zu den meisten SAS©-Funktionen, die den Wert einer Variablen verarbeiten, gibt VNAME den Namen der Variablen selbst zurück.
In Kombination mit einer Schleife über ein Array (ARRAY) ermöglicht diese Funktion das dynamische Durchlaufen der Spalten.
Methode 1: Der iterative Ansatz (Empfohlen)
Diese Methode ist die direkteste und oft die effizienteste. Sie besteht darin:
Ein ARRAY zu deklarieren, das alle relevanten Spalten zusammenfasst.
Über dieses Array zu iterieren.
Zu prüfen, ob der Wert nicht fehlt.
Wenn ein Wert vorhanden ist, den Namen der Variablen (über VNAME) an unsere Ergebnisvariable anzuhängen.
Schlüsselpunkte des Codes:
study:: Der Doppelpunkt ist ein Platzhalter (Wildcard), der alle Variablen auswählt, die mit dem Präfix "Study" beginnen.
catx(", ", ...): Diese Funktion ist ideal, da sie Trennzeichen automatisch verwaltet. Sie fügt kein Komma am Anfang der Zeichenkette hinzu, wenn diese leer ist, und entfernt unnötige Leerzeichen.
Methode 2: Der Ansatz mit parallelen Arrays
Eine andere Möglichkeit besteht darin, zwei Arrays zu verwenden: eines für die numerischen Werte und ein anderes, um die Namen als Zeichen zu speichern, und dann am Ende alles zu verketten.
Hinweis zur Leistung
Obwohl die zweite Methode funktioniert, kann sie bei sehr großen Datensätzen weniger leistungsfähig sein, wenn die Funktion catx innerhalb der Schleife platziert wird. Tatsächlich ist das Verketten der gesamten Liste bei jeder Iteration eine unnötig kostspielige Operation.
Wenn Sie den iterativen Ansatz (Methode 1) verwenden, bleibt die Verwendung von catx Zeile für Zeile, sobald die Bedingungen erfüllt sind, sehr effizient, da nur eine einzige Zeichenkette schrittweise aufgebaut wird.
Die gemeinsame Verwendung von ARRAY und VNAME bietet eine enorme Flexibilität für die Datenbereinigung ("Data Munging"). Dies ermöglicht es, die Struktur von Metadaten (die Spaltennamen) in verwertbare Daten (Zellenwerte) umzuwandeln, was besonders nützlich ist, um automatisierte zusammenfassende Berichte zu erstellen.