Spalten alphabetisch sortieren

Hallo,

weiss jemand, wie man die Spalten/Variablen (nicht Beobachtungen) einer Tabelle alphabetisch sortieren kann?
Eine Möglichkeit wäre das retain-Statement, aber dazu müsste ich alle Variablen auflisten, und das sind ziemlich viele...

Viele Grüße,
Barbara

Wenns in Form eines Macros

Wenns in Form eines Macros sein darf...

Geht sicher auch noch etwas besser, aber das hab ich vor ner weile dafür schonmal gebaut und es funktioniert immerhin :-)


%macro sort (lib_in=,data_in=,data_out=);

proc sql noprint;
   select count(name) into :n
   from dictionary.columns
   where libname=
%upcase("&lib_in.") and memname=%upcase("&data_in.");

   create table temp as
   select name
   from dictionary.columns
   where libname=
%upcase("&lib_in.") and memname=%upcase("&data_in.")
   order by name;
quit;

data temp;
   set temp;
   N = _N_;

%do i=1 %to &n.;
   proc sql noprint;
   select name into: col_&
i. from temp
   where N = &
i.;
%end;

data &
data_out.;
   retain
      
%do i=1 %to &n.;
      &&col_&
i.
      
%end;
   ;
   set &
lib_in..&data_in.;
run;

proc datasets lib=work;
   delete temp;
quit;

%mend sort;

%sort (lib_in=sashelp,
       data_in=class,
       data_out=out);

Kürzer

Guten Morgen,

das Ganze läßt sich noch etwas kürzer gestalten:

%macro namesort(lib,dataset) ;
    proc contents data=&
lib..&Dataset. out=Temp noprint ;
    run ;

    proc sql noprint ;
        select name into :Namen separated by
' '
        
from
            Temp
        where
            upcase(libname) = upcase(
"&lib.")
            and
            upcase(memname) = upcase(
"&dataset.")
        order by name ;

        drop table temp ;
    quit ;

    data &
lib..&Dataset._out ;
        retain &Namen ;
        set &
lib..&Dataset. ;
    run ;
%mend ;
%namesort(work,Test) ;

Man auch auf den Proc Contents-Aufruf verzichten und mit Proc SQL direkt auf das Dictionary zugreifen, allerdings kann das bei großen Projekten eine Weile dauern.

Dieses Thema wurde bereits

Dieses Thema wurde bereits einmal ausführlich mit den verschiedensten Varianten diskutiert unter Inhalt einer Macro-Variable sortieren.