2016-07-12 6 views
0

Vielleicht ist der Titel ein wenig verschwommen, ich hoffe, Sie werden meine Frage verstehen.SAS SQL oder Datenschritt: Wie wähle ich Werte, die mit verschiedenen Zahlen beginnen

Hintergrund: Ich arbeite mit Daten über Universitätsstudenten, und mir wurde die Aufgabe übertragen, die Notendurchschnitte für alle Prüfungen eines bestimmten Semesters für einen Teil der vordefinierten Studenten zu berechnen. Die Zeitspanne der Daten beträgt 10 Jahre und die Tätigkeitsnamen für die Prüfungen variieren mit der Zeit.

Mein Problem: Daten haben eine hierarchische Struktur für die Ebene der Ausbildung, Semester und Aktivitäten Namen. Wie kann ich einen Datenschritt/SQL auf der untersten Ebene verwenden, um nur die Werte auszuwählen, die mit dem Wert für die oberste Hierarchie beginnen.

Die Hierarchie ist die folgende (für einen einzelnen Schüler):

13109963 
1310996300001 
131099630000100001 
13109963000010000100001 (activities) 
13109963000010000100002 (activities) 
13109963000010000100003 (activities) 

Ich habe mit diesem für ein paar Stunden zu kämpfen, und würden Vorschläge schätzen, wie auf diesem speziellen Problem fortzufahren. Ich benutze SAS seit drei Jahren und habe einen Hintergrund in den Sozialwissenschaften.

Vielen Dank im Voraus Henning

+0

Welche Zeilen möchten Sie in Ihrem Beispiel auswählen? Nur die unteren drei? – superfluous

+0

Bitte formulieren oder erläutern Sie "Wie kann ich einen Datenschritt/SQL auf der untersten Ebene verwenden, um nur die Werte auszuwählen, die mit dem Wert für die oberste Hierarchie beginnen." ... es ist verwirrend. Was ist "unterste Ebene", was ist "oberste Hierarchie"? –

Antwort

0

ein paar Optionen in SAS Es gibt, dass Sie diese Aufgabe zu erfüllen lassen.

Hier ist ein kurzes Beispiel.

data sample; 
length level $60.; 
input level $1-60; 
/*Option 1 
Subset obs based on top hierarchy and select bottom hierarchy 
based on the length of the string 
*/ 
opt1 = substr(level,1,8)='13109963' and length(level)>23 ; 
/*Option 2 
Subset obs based on the length of the string to pick all lowest level regardless 
of the top hierarchy (in this case will return the same result) 
*/ 
opt2 = length(level)>23 ; 
/* Option 3: 
if all lowest level hierarchies have a '(' you can then use the index function 
*/ 
opt3 = index(level,'(')>1; 
/* Option 4: Is using regex but I think any of the above will suffice*/ 
cards; 
13109963 
1310996300001 
131099630000100001 
13109963000010000100001 (activities) 
13109963000010000100002 (activities) 
13109963000010000100003 (activities) 
; 
run; 

Sie können auch & Spiel mischen oben eine der Optionen nur diejenigen Beobachtungen zu wählen. Zum Beispiel: if substr(level,1,8)='13109963'and index(level,'(')>1; wird das gleiche Ergebnis zurückgeben.

+0

Vielen Dank für die Antwort. Es scheint nur für diesen einzelnen Schüler zu funktionieren. Vielleicht irre ich mich. Mein Problem ist allgemeiner für Tausende von Studenten mit der gleichen Datenstruktur wie die oben angegebene. Ich habe einen Weg gefunden, iterativ die Datenhierarchie mit vielen DATENSCHRITTEN und SQL'S zu durchwühlen. Vielleicht gibt es eine klügere Art, Dinge zu tun :-) –

+0

Ich denke, du musst dein Problem besser erklären, dann ist cos nicht klar – Altons

+0

Danke euch allen für den Versuch, mir zu helfen. Ich habe einen Weg durch mein Problem gefunden. –

Verwandte Themen