Frage

Gibt es eine inhärente Methode in SAS die Sortierreihenfolge eines Datensatzes zu finden?

War es hilfreich?

Lösung

Wie Sassy sagt, der einzige Weg, SAS weiß, ob ein Datensatz sortiert wird, wenn es die Sortierung haben, oder wenn Sie explizit die Sortierreihenfolge erzählen. Wenn Sie keine dieser Schritte getan haben, wird es keine Ahnung haben, wenn die Daten in jeder Art von Ordnung ist.

Ich mag AFHood Idee von nur versuchen, es zu sortieren. Wenn SAS weiß ist, dass es so geordnet wird es Ihnen sagen und wird es nicht wieder tun.

NOTE: Input data set is already sorted, no sorting done

Hier sind einige andere Ideen für die Untersuchung von Datensortierung ... Genießen.

Wenn Sie nur manuell um es betrachten möchten, können Sie proc Inhaltsdaten = libname.data verwenden; laufen; und Blick auf den Ausgang. Es ist ein Attribut namens sortiert. Wenn Sie die Windowing-Modus verwenden, können Sie direkt auf der im Explorer Datensatz klicken und Eigenschaften wählen, klicken Sie auf die Registerkarte Details und sehen Sie die sortedby Werte.

Für einen programmatischen Testansatz können Sie einen Ausgabedatensatz von proc Inhalten verwenden. Die sortierten und sortedby Spalten werden Ihnen sagen, wenn der Datensatz sortiert wird und die Variable wird sortiert nach. Versuchen Sie es, indem Sie den Code unten ausgeführt wird.

/* In an unsorted data set, proc contents will give missing values
   for the sorted and sortedby columns of its output data */
proc contents data=sashelp.class out=class_contents noprint;run;
proc print data=class_contents;
  var memname name sorted sortedby;
run;

/* Now sort and observe the changes in the sorted and sortedby columns */
proc sort data=sashelp.class out=class_sorted; by name;run;
proc contents data=class_sorted out=class_sorted_contents;run;
proc print data=class_sorted_contents;
  var memname name sorted sortedby;
run;`enter code here`

Andere Tipps

Wenn die Daten in der Tat werden „sortiert“, ja. Es gibt eine kleine Tabelle betreffend Sortierinformationen an der Unterseite des Ausgangs von proc Inhalt erzeugt.

Datensätze, die mit Daten erstellt wurden, die bereits in einer Art Sortierreihenfolge möglicherweise nicht über diese Informationen mit ihnen verbunden waren und Sie beginnen müssen, um die Daten zu erkunden ihre Reihenfolge zu bestimmen.

Sie können die Attrc-Funktion verwenden.

Docs unter http://support.sas .com / onlinedoc / 913 / GetDoc / en / lrdict.hlp / a000147794.htm

Es geht so etwas wie das folgende

data _null_;
   dsid=open("work.a","i");
   sortby=attrc(dsid,"SORTEDBY");
   put  sortby=;
   rc=close(dsid);
run;

Ich gehe davon aus, dass das Problem, das Sie zu bestimmen, zu lösen versucht, ob ein Datensatz in einer programmatischen Art und Weise sortiert werden muss. Die beste Lösung, die wir verwendet haben, ist einfach proc Art zu verwenden, wenn im Zweifel.

Natürlich könnte man sagen, das ist Overhead und Verarbeitung .. Na ja, aber wenn der Datensatz bereits korrekt sortiert, proc Art mit weiß es und lassen Sie Ihren Code Schachzug mit minimaler Verarbeitung. Es ist die Logik „wenn dann auf verschieben sortiert“ eingebaut.

Wenn dies nicht das Problem ist, die Sie versuchen zu lösen, aufwendige und wir werden sehen, ob wir helfen können.

Wenn sas nicht die Daten sortieren haben, aber Sie denken, es sortiert werden können, können Sie versuchen, es zu verarbeiten, als ob es geordnet ist und sich mit den Fehlern, die oder nicht als Folge auftreten können.

* This works, swap some values to see how an error looks;
data foo;
input height;
cards;
1
2
3
4
;
run;

data _null_;
set foo;
by height;
run;

Fehlerzustände können im Makro erkannt und zurückgesetzt werden, aber dieser Ansatz ist wahrscheinlich chaotisch zu bekommen. Weitere Informationen über das hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top