2016-05-08 14 views
0

Ich habe eine Liste von SAS-Datasets, die ich nach derselben Variablen sortieren möchte.SAS - Mehrere Datensätze mit Loops sortieren

Ich möchte nicht die PROC Sort-Anweisung für jede von ihnen verwenden, gibt es eine Möglichkeit, Schleifen zu verwenden, um den gesamten Code zu verkürzen?

Ich bin neu in SAS also bitte helfen!

+0

Beitrag, was Sie bitte versucht haben. Mehr als wahrscheinlich, müssen Sie ein Makro verwenden, also erklären Sie, wie Ihre 'Liste von Datensätzen' gespeichert wird, ist es bereits in einer SAS-Tabelle? Oder ist es in einer Textdatei oder in Ihrem Kopf? Oder gibt es eine Namenskonvention für sie? – Reeza

+0

Ja, es ist in Form von SAS-Datensätzen (keine Textdatei), ich möchte sie alle mit Proc Sortierung sortieren. Ich habe ungefähr 10 Datensätze, also muss ich 10 Proc Sortieranweisungen schreiben (eine für jeden Datensatz). Ich möchte stattdessen Schleife verwenden .. –

+0

Posten Sie, was Sie versucht haben oder zumindest Ihren aktuellen Code. – Reeza

Antwort

1

Angenommen, Sie haben einen Datensatz namens dname_list mit den Dateinamen, und sie heißen dname. Call execute generiert den Code und führt ihn aus.

Normalerweise erstelle ich meinen Befehl in einer Zeichenfolge und dann übergeben, dass Aufruf ausführen. Dies ist ein data _null_ Schritt, so dass kein Datensatz generiert wird. Sie können jedoch den zu testenden Datensatz bei Bedarf zuerst generieren.

Sie müssen keine Schleife ausführen, da SAS die Datensätze in einem Datensatz selbst durchläuft.

Wenn Sie Daten in einer Bibliothek sortieren, müssen Sie auch den Namen der Bibliothek angeben.

data _null_; 
*data dname_execute; 

set dname_list; 
string = catt('proc sort data=', dname, '; by age; run;'); 
call execute(string); 
run; 
1

sollten Diese helfen:

%macro multsort(indlist,outdlist,byvarlist,ndata); 
%do i = 1 %to &ndata.; 

    %let indata = %scan("&indlist.",&i.," "); 
    %let outdata = %scan("&outdlist.",&i.," "); 
    %let byvars = %scan("&byvarlist.",&i.," "); 
    proc sort data = &indata. out=&outdata.;by &byvars. ;run; 
%end; 
%mend; 

%multsort(indlist=sashelp.Air sashelp.Buy,outdlist=Sa Sb,byvarlist=Air amount,ndata=2); 
+0

Wofür sind die Zitate? Ich schätze, Sie könnten die Anführungszeichen in der Trennzeichenliste für die Funktion% SCAN() verwenden, damit Sie den Makrocode sehen können, ohne den% STR() verwenden zu müssen, aber warum haben Sie ihn auch in die Liste von Namen? – Tom

+0

Das ist, weil ich unquoted Text an das Makro übergebe, die Anführungszeichen am Ende auflösen 'outdlist' als' "Sa Sb" ', ohne Anführungszeichen würde es nur' Sa Sb' sein. –

+0

Makrocode behandelt Anführungszeichen wie alle anderen Zeichen. Wenn Sie also das erste Element aus der durch Leerzeichen begrenzten Liste "Sa Sb" nehmen, wird das Ergebnis "Sa" anstelle des gewünschten "Sa". Ihr Code funktioniert nur, weil Sie auch% SCAN() sagen Behandle '' 'als Trennzeichen und überspringt alle Begrenzer am Anfang der Liste, wenn nach dem ersten Element gesucht wird. – Tom