Hallo Florian,
dein order by Statement steht an der falschen Stelle Select-Abfragen sind immer nach dem Schema:
Proc SQL;
Select <Spalten oder Ausdrücke>
from <Sourcetabelle(n)
where <filterbedingungen auf Source>
group by <Gruppierungsausdrücke>
having <Filter auf das berechnete Ergebnis>
order by <Spalten des Ergebnisses nach dem Sortiert werden soll>
;
quit;
aufgebaut. In SAS sind der "Select"- und "from"-Abschnitt verpflichtend, "where", "group by", "having" und "order by" sind optional. Die Reihenfolge muss aber immer eingehalten werden.
Der Abschnitt in meinem Code ,(...) as T2 ist ein sogenannter Subselect und gehört mit zum from-Abschnitt des oberen Abschnitts. Im ersten Beispiel hatte ich den Subselect weggelassen, weil ich ihn für Dich als Anfänger verwirrend hielt. Das Ausformulieren war nur als Erläuterung gedacht, warum ich die Note nicht schlimm finde.
SQL habe ich nur verwendet, weil Du mit dem EG arbeitest.
Im EG kannst Du Dir Deinen SQL-Code zusammenklicken, was ich Dir auf jeden Fall erstmal empfehlen würde. Als Beispiel wie du zu Deinem Ergebnis kommst gehe ich das einmal für Dich durch.
Die Tabelle auswählen und öffnen, die Du analysieren willst
Abfrage erstellen anklicken
Die Spalten oder die ganze Tabelle in der linken Liste in die rechte Liste unter dem Reiter "Daten auswählen" ziehen.
Die Spalte Dat_stnd ein zweites Mal in die rechte Liste ziehen. Unter Spaltenname passt der EG zu Dat_stnd1 an.
In der dritten Spalte "Zusammenfassung" der rechten Liste dann Max auswählen. In "Spaltenname" steht jetzt "max_of_Dat_stnd". Unter "Quellspalte" steht jetzt "berechnet". Unter der rechten Liste ist jetzt der Punkt "Gruppen automatisch auswählen" erschienen und alle anderen Spalten sind dort vorausgewählt.
Den Haken bei "Gruppen automatisch auswählen" wegnehmen. Die vorausgewählten Spalten verschwinden wieder
Gruppen bearbeiten anklicken
Aus der Liste verfügbare Spalten VNR nach "Gruppieren nach" bewegen
Zum Reiter "Daten filtern" wechseln. Die Liste "Rohdaten filtern" entspricht der "where"-Bedingung, die Liste "Zusammengefasste Daten filtern" der having-Bedingung.
Bei "Zusammengefasste Daten filtern" auf den Trichter/Filter klicken und einen neuen Filter anlegen.
Einfachen Filter auswählen
Unter "berechnete Spalten" "Max_of_Dat_stnd" auswählen. Nach Klick auf "weiter" steht jetzt unter Quellspalte "Berechnet", unter Spaltenname "Max_of_Dat_stnd" und unter Operator "Gleich".
Bei Wert auf den Pfeil rechts klicken, auf den Reiter Spalten gehen und "Dat_stnd" auswählen. Nach Klick auf "weiter" erscheint die Zusammenfassung des Filters und mit "Fertigstellen" abschließen.
Zum Reiter "Daten sortieren" wechseln
Die beiden Spalten "VNR" und "Dat_stnd" nach links ziehen.
Unter "Vorschau" im Menü des Fensters kannst Du dir den generierten Code anschauen und dir eine Vorschau des Ergebnisses anzeigen lassen. Sollte jetzt noch irgendein Fehler im Code sein, bekommst Du eine Fehlermeldung.
Je nach Deinen Einstellungen im EG wird Dir jetzt eine neue Tabelle, einen neue Sicht oder ein Report erstellt. Unter Optionen kannst Du jetzt für diese Abfrage die Voreinstellung außer Kraft setzen und eine andere Ausgabeart wählen.
Dort kannst Du ebenfalls den Namen der erzeugten Tabelle oder Sicht ändern.
Mit Klick auf "Ausführen" wird die Abfrage ausgeführt.
Ich gebe zu, dass der Abfrageeditor im EG nicht sonderlich intuitiv ist und man relativ viel klicken muss, aber er erzeugt korrekten Code. Im EG gibt es aber nur die Möglichkeit SQL-Code zusammenzuklicken, es ist nicht möglich "SAS-Code" mit einem Assistenten zu erstellen. Ist man fitter mit SQL lässt man den Abfrageeditor außen vor oder klickt sich nur noch das Grundgerüst zusammen, um Tippfehler zu vermeiden. Um wirklich zu verstehen, was dort geschieht muss man sich sowohl mit dem Abfrageeditor, als auch mit SQL beschäftigen. Belohnt wird man dafür mit Kenntnissen in SQL, die man in allen möglichen anderen Bereichen der Datenverarbeitung gebrauchen kann, weil das Grundgerüst der Sprache immer gleich ist, auch wenn die genaue Syntax differiert.
VG Jan
... View more