2017-09-28 5 views
1

Ich weiß, dass dies eine sehr einfache Frage ist, aber mein Code schlägt fehl, wenn ich versuche, das auszuführen, was ich über die Hilfedokumentation gefunden habe.den geänderten Datensatz dauerhaft speichern

Bis jetzt habe ich ein Analyse-Projekt aus dem .WORK-Verzeichnis ausgeführt, von dem ich weiß, dass es jedes Mal ausgelöscht wird, wenn eine Sitzung endet. Ich habe eine Reihe von Datenbereinigungen und -vorbereitungen durchgeführt und möchte dies nicht jedes Mal tun, bevor ich mit meiner Analyse beginne.

So verstehe ich, aus dem Lesen dieser: https://support.sas.com/documentation/cdl/en/basess/58133/HTML/default/viewer.htm#a001310720.htm, dass ich den bereinigten Datensatz in einem nicht-temporären Verzeichnis ausgeben muss.

Schritte habe ich bisher gemacht: 1) erstellt eine neue Bibliothek namens „Projekt“ 2) gespeichert es in einem Ordner, die ich unter „meine Ordner“ in SAS haben 3) Mein Code für die gereinigte Dataset Speichern in die Bibliothek „Projekt“ ist wie folgt:

PROC SORT DATA=FAA_ALL NODUPKEY; 
BY GROUND_SPEED; 
DATA PROJECT.FAA_ALL; 
RUN; 

Dann laufe ich diesen Code in ein neues Programm:

PROC PRINT DATA=PROJECT.FAA_ALL; 
RUN; 

Es sagt, dass es keine Beobachtungen sind und dass der Datensatz ist im wesentlichen leer.

Können mir einige sagen, wo ich falsch liege?

Antwort

4

Ihr Problem ist die PROC SORT

PROC SORT DATA=FAA_ALL NODUPKEY; 
BY GROUND_SPEED; 
DATA PROJECT.FAA_ALL; 
RUN; 

PROC SORT DATA=FAA_ALL OUT= PROJECT.FAA_ALL NODUPKEY; 
BY GROUND_SPEED; 
RUN; 

sein sollte, dass DATA PROJECT.FAA_ALL wurde ein Daten Schritt Starten eines leeren Datensatzes zu schaffen.

+0

Vielen Dank. Das hat funktioniert. Also habe ich den falschen Hilfeartikel von der SAS Website gelesen? Erwähnte kein "out" Argument. – William

+1

Ich denke, Sie waren auf dem richtigen Weg, das war nur ein Syntaxfehler in Ihrem Code. – DomPazz

+0

Danke! Ich schätze die Korrektur! – William

2

Noch etwas, das erwähnenswert ist: Ihr Datenschritt hat nicht das getan, was Sie erwartet hätten, weil Sie keine feste Anweisung hatten. Der Code war äquivalent zu:

PROC SORT DATA=WORK.FAA_ALL NODUPKEY; 
BY GROUND_SPEED; 
RUN; 

DATA PROJECT.FAA_ALL; 
SET _NULL_; 
RUN; 

PROJECT.FAA_ALL leer ist, weil nichts gelesen wurde

Die SORT Prozedur sortiert implizit einen Datensatz in-place.. Sie könnte SAS die sortierten Daten verschieben, indem Sie die set Anweisung, um Ihre Daten Schritt:

PROC SORT DATA=WORK.FAA_ALL NODUPKEY; 
BY GROUND_SPEED; 
RUN; 

DATA PROJECT.FAA_ALL; 
SET WORK.FAA_ALL; 
RUN; 

jedoch das dauert noch zwei Schritte, und erfordert zusätzliche Disk-I/O. Die Verwendung der Option out in einer SAS-Prozedur (wie in der Antwort von DomPazz) ist fast immer schneller und effizienter als die Verwendung eines Datenschritts zum Verschieben von Daten.

Verwandte Themen