Community deutschsprachiger SAS-Anwender und -Programmierer

Antworten
Dies ist eine offene Gruppe. Melden Sie sich an und klicken Sie auf die Schaltfläche „Gruppe beitreten“, um Mitglied zu werden und damit zu beginnen, Beiträge in dieser Gruppe zu veröffentlichen.
Highlighted
Contributor
Beiträge: 42
10 größte

Hallo wieder einmal,

 

ich habe eine Abfrage die mir die Daten nach Größe sortiert rauswirft (Im Data Integration Studio).

 

Ich möchte mir aber nur die 10 größten Fälle anzeigen lassen. Gibt es da eine Option beim Extract z.B.?

 

Danke im voraus!

Contributor
Beiträge: 21
Betreff: 10 größte

Hallo FAY123,

 

sollte über den SQL-Sort mit descending und der Proc SQL Option outobs=10 relativ einfach machbar sein.

 

Viele Grüße,

 

Grischa

Frequent Contributor
Beiträge: 117
Betreff: 10 größte

Hallo Fay,

 

das sollte mit einem Rank gehen. Hier lässt sich auch steuern, was mit zwei gleichen Beobachtungen geschehen soll.

Anschließend lässt sich ggf. mit einem Where die Ausgabe steuern oder das Ergebnis anderweitig weiterverarbeiten.

(Beispiel in Englisch: https://support.sas.com/documentation/cdl/en/etlug/66819/HTML/default/n1ekkk68nic8q9n1wf7b9o2rdm39.h...

 

Viele Grüße

mfab

Contributor
Beiträge: 21
Betreff: 10 größte

Hallo Fay,

 

noch eine schöne Variante - allerdings in einem User-Exist - ist Proc Means. Hier gibt es die Anweisung IDGROUP, die nach den Ausprägungen (min/max) einer Variable(-nliste) sortiert und dann die N ersten bzw. letzten Ausprägungen einer weiteren Variable(-nliste) in eine Datei speichert. Beispiel für eine Fragestellung: Gib mir Name, Alter und Geschlecht der zehn ältesten Schüler aus (Tabelle Sashelp.Class). Die Ergebnistabelle enthält für jeden Wert eine Variable und kann über Proc Transpose oder einen Data Step gedreht werden.

 

Hier ein Beispiel:


Proc Means noprint data=sashelp.class;
  Output out=Work.test
    idgroup(
      max(age) 
      out[10]
      (name age sex)=   
    )
  ;
Run;

Data Work.Test2 (keep=pos name age sex) ;
  Set Work.Test;
  Array _name n:;
  Array _age a:;
  Array _sex s:;

  Do i=1 To dim(_name);
    pos = i;
    name = _name(i);
    age = _age(i);
    sex = _sex(i);
    Output;
  End;
Run;

Viele Grüße,

 

  Grischa