Sortierung nach Tabellenvorbild

<< Click to Display Table of Contents >>

Navigation:  Datenauswertung > Sortierung >

Sortierung nach Tabellenvorbild

Table Sort as

In einer Reihe von Fällen legen die Daten eine bestimmte Sortierung der Darstellung nahe, dem dient die SORT-Klausel in den TABLE-Statements. Ebenso sinnvoll kann es in bestimmten Zusammenhängen sein, Daten in darauf folgenden Tabellen in derselben Reihenfolge zu präsentieren. Diesem Verlangen kann man im TABLE-Statement mit der Option SORT AS nachkommen.

Es ist leicht nachvollziehbar, dass die Basistabelle, deren Sortierung man vererben möchte, einen eindeutigen Namen tragen muss, damit man sie referenzieren kann. Alle Tabellenformen, die intern formal als TABLE repräsentiert werden - das sind neben TABLE auch XTAB , OVERVIEW und XOVERVIEW - können mit der NAME-Klausel intern benannt werden. Aus all diesen Tabellentypen lassen sich Reihenfolgen vererben.

Nehmen wir als Beispiel OVERVIEW-Tabellen mit Mittelwerten und Standardabweichung. Gegeben sei folgendes Szenario: Wir haben sechs Variablen, die die Bekanntheit von sechs Politikern (Merkel , Gabriel, Altmaier, Söder, Trittin, von der Leyen) misst: v1 bis  v6. Außerdem haben wir sechs Variablen, die die generelle Zustimmung zu denselben Politikern misst: a11 bis a16.

Auch in diesem Beispiel werden reine Zufallszahlen verwendet. Bitte keinen inhaltlichen Sinn in den Ergebnissen suchen. Aus diesem Grunde sind auch die numerischen Unterschiede so gering.

Wir stellen in einer ersten OVERVIEW die Bekanntheit absteigend sortiert dar, und wollen dann in einer zweiten Tabelle die Zustimmungswerte tabellieren, wobei die Reihenfolge der Politiker beibehalten werden soll:

FRAMEELEMENTS = TOTALCOLUMN; 

#macro #m_name( &1 &2 ) &2&1 #endmacro

OVERVIEW 
TITLE "Basistabelle, NAME=’overbase’" 

NAME overbase

= #k BY MEAN STDDEV( #domacro2 ( m_name 1:6; v ) )

SORT MEAN DESCEND; 

OVERVIEW

TITLE "Tabelle mit vererbter Sortierung, SORT AS ’overbase’" 

SORT AS overbase

= #k BY MEAN STDDEV( #domacro2 ( m_name 11:16; a ) ); 

Sortierung vererben: Basistabelle

Sortierung vererben: Basistabelle

Tabelle mit vererbter Sortierung

Tabelle mit vererbter Sortierung

Die neue Implementierung von »SORT AS« erlaubt auch die Vererbung von Reihenfolgen im Kopf von Tabellen. Wir wandeln unser Beispiel kurz ab, und zeigen formal dieselbe Information in einem XOVERVIEW.

'Formal', weil der/die aufmerksame Leser/in feststellen wird, dass sich die Messwerte zu den Politikern in dieser schnelllebigen Zeit geändert haben. So schnell schlägt der Zufallsgenerator zu.

Das Skript ist nur wenig verändert: wir benutzen dasselbe Makro-Konstrukt wie oben. Wichtig ist in diesem Zusammenhang die erste Zeile: SORT AS = XVALID;

Als Default (SORT AS = YVALID;) überträgt SORT AS die Sortierung in der Y-Achse der Tabelle. In diesem Fall wollen wir aber die Sortierung der X-Achse vererben.

SORT AS = XVALID; 

XOVERVIEW TITLE "Basistabelle, NAME=’Xoverbase’" 

NAME Xoverbase

= MEAN STDDEV( #domacro2 ( m_name 1:6; v ) ) SORT MEAN DESCEND BY #k; 

XOVERVIEW TITLE "Tabelle mit vererbter Sortierung, SORT AS ’Xoverbase’" SORT AS Xoverbase

= MEAN STDDEV( #domacro2 ( m_name 11:16; a ) ) BY #k; 

Sortierung im Tabellenkopf vererben: Ausgangstabelle

Sortierung im Tabellenkopf vererben: Ausgangstabelle

Tabelle mit vererbter Sortierung im Tabellenkopf

Tabelle mit vererbter Sortierung im Tabellenkopf

Halten wir fest: SORT AS kann Reihenfolgen in der X-Achse genauso übertragen wie in der Y-Achse. Welche Übertragung gewünscht wird, kann man mit der gleichnamigen Voreinstellung festgelegt werden:

Syntax:

SORT AS = [ XVALID | YVALID ]; 

Es ist auch möglich, in einer Tabelle Sortierungen sowohl in der X-Achse als auch in der Y-Achse vorzunehmen, und man kann auch beide gleichzeitig übertragen: SORT AS = XVALID YVALID;, obwohl dieser Wunsch in der Praxis selten auftaucht.

Interessanter dürfte folgender Zusammenhang sein: Wie in der Beschreibung zu OVERVIEW betont, sind alle Mittelwertzeilen in einer OVERVIEW-Tabelle (und symmetrisch alle Mittelwertspalten in einer XOVERVIEW-Tabelle) keine eigenen Variablen mit aufsteigender Variablennummer, sondern ihnen entsprechen Labels mit aufsteigenden Codewerten. Das bedeutet wiederum, dass sie aus Sicht des Compilers für die Darstellung formal gleichartig sind mit Tabellen des Typs TABLE = v1 BY v2;.

Das macht es wiederum möglich, dass diese auf der Basis von Mittelwerten gewonnene Sortierungsreihenfolge auch auf die Labels z.B. einer VARGROUP übertragen werden kann. Kommen wir noch einmal auf das erste Beispiel zurück: die Tabelle mit dem Namen "overbase", und tabellieren wir gegen denselben Kopf eine VARGROUP mit den Top-2-Boxes. Die Reihenfolge der Politikernamen soll sich an der Reihenfolge in der Tabelle mit dem Namen "overbase" orientieren: VARGROUP top2 = ( a11 TO a16 ) EQ 4 5;

VARTITLE top2 = "Top-2 Box (sehr gut, gut)"; 

TABLE

TITLE "Tabelle mit vererbter Sortierung, SORT AS ’overbase’" 

SORT AS overbase

= #k BY top2; 

Hier ist Tabelle "overbase" erneut abgebildet, weil sich die Werte unserer Politiker schon wieder geändert haben.

Basistabelle »overbase«

Basistabelle »overbase«

Und hier die strukturell einfache Kreuztabelle TABLE = #k BY top2; die ebenso der Vererbung gehorcht. Schwer zu sagen, was uns diese Tabelle inhaltlich sagen kann; aber die Reihenfolge unserer fiktiven Politiker ist jedenfalls erhalten geblieben. Quod erat demonstrandum.

Kreuztabelle mit vererbter Sortierung

Kreuztabelle mit vererbter Sortierung

Sortierte Tabellen können auch so viele Items enthalten, dass eine Darstellung auf einer Seite nicht mehr übersichtlich ist. Tabellen lassen sich am effektivsten mit der Voreinstellung MAXROWSPERTABLEPAGE / MAXCOLSPERTABLEPAGE auf mehrere Seiten verteilen.

Für unser Beispiel verwenden wir zwei Sets von je 20 Variablen (r1 . . . r20, p1 . . . p20), die die Bekanntheit von 20 Produkten zu zwei Zeitpunkten messen, die der Einfachheit der Demonstration halber nur mit ihren Produktnummern bezeichnet werden.

MAXROWSPERTABLEPAGE = 12; 

OVERVIEW

NAME slicebase

TITLE "Basistabelle, NAME=’slicebase’" 

=

#k BY MEAN( #domacro2( var 1:20; r ) ) SORT MEAN; 

OVERVIEW

SORT AS slicebase

TITLE "Tabelle mit vererbter Sortierung, SORT AS ’slicebase’" 

=

#k BY MEAN( #domacro2( var 1:20; p ) ); 

Die erste Seite der Basistabelle (zwölf Variablen):

Basistabelle über mehrere Seiten, erste Seite

Basistabelle über mehrere Seiten, erste Seite

Die zweite Seite der Basistabelle (acht Variablen):

 Basistabelle über mehrere Seiten, zweite Seite

 Basistabelle über mehrere Seiten, zweite Seite

Die erste Seite der Tabelle mit der vererbten Reihenfolge:

Tabelle mit vererbter Sortierung über mehrere Seiten, erste Seite

Tabelle mit vererbter Sortierung über mehrere Seiten, erste Seite

Und die zweite Seite der Tabelle mit der vererbten Reihenfolge mit den verbleibenden acht Variablen:

Tabelle mit vererbter Sortierung über mehrere Seiten, zweite Seite

Tabelle mit vererbter Sortierung über mehrere Seiten, zweite Seite