Variablengruppen

<< Click to Display Table of Contents >>

Navigation:  Datenmodifikation > Variablen und Codes > Gruppierungen >

Variablengruppen

Eine VARGROUP (oder: GroupVar) definiert eine Gruppe von Variablen, die gemeinsam ausgewertet werden sollen. In der Regel wird man VARGROUP benutzen, um einzelne Variablen, die zusammen eine 0/1-Gruppe von Mehrfachnennungen bilden (DichoQ), in einer Variablengruppe zusammenzufassen.

Gebildet werden Variablengruppen mit den Statements VARGROUP, GROUPS und MAKEGROUP.

Als elegantere Alternative für die reine Zusammenfassung von Wertebereichen steht INTERVALS zur Verfügung.

Für den Datensatz-Output von VarFamilys in SPSS ist deren Umformung in eine VARGROUP mittels SPSSGROUP empfohlen.

Einstellungsoptionen für VARGROUPS steuern die Behandlung 'ungültiger' Fälle sowie die Vererbung von Vartext und Vartitle.


VarGroup

Bildung einer Variablengruppe

Syntax:

VARGROUP <name> = ( <varlist> ) EQ <valuelist>;

<varlist> ::= Liste von atomaren Variablen
<valuelist> ::= Liste von Einzelwerten

Beispiel:

VARGROUP Items = ( item.1 item.2 item.3 item.4 ) EQ 1;

Vor dem Gleichheitszeichen steht der Name der Variablengruppe. Variablengruppennamen unterliegen den Syntaxregeln der Variablennamen: insbesondere darf es noch keine Variable mit dem Namen der Variablengruppe geben. Hinter dem Gleichheitszeichen folgt in Klammern die Liste der einfachen (atomaren) Variablen, die zur Gruppe zusammengefasst werden sollen. Durch die Angabe der Zahl hinter dem EQ-Symbol gibt man an, welche Ausprägung in der Liste der Ursprungsvariablen als "Nennung" im Sinne der Variablengruppe gelten sollen. Es sind keine arithmetischen Operationen mit den Variablengruppen erlaubt als Argument. RECODE oder RANGES sind zwar möglich; sie werden als Operation auf alle atomaren Einzelvariablen angewandt. Variablengruppen können aber ansonsten wie Variablen behandelt werden: So können ihnen z.B. VARTITLE oder VALUELABELS zugewiesen werden.


Groups

Wenn die einzelnen (atomaren) Variablen noch gar nicht vorliegen, aus denen die Variablengruppe gebildet werden soll, dann ist oft die GROUPS-Anweisung die praktischere Alternative, denn hiermit können die Benennungen und komplexere Bildungsvorschriften übersichtlicher formuliert werden.

Syntax:

GROUPS <Varname> = { | "Labeltext ..."
[ LEVELLEVEL <number> ]
[ USEFONT <Fontname> [ SIZE <number> ] ]
[ CELLELEMENTS ( { <cellelement> }*n ) ]
: <log. Bedingung> }*n ;

Jeweils hinter dem Doppelpunkt kann eine beliebig komplexe logische Bedingung stehen, die über die Zugehörigkeit eines Falles in die jeweilige Gruppe entscheidet. Die Bedingungsbestandteile können mit AND und OR verknüpft werden, Klammern können verwendet werden. In der logischen Bedingung dürfen Textkonstanten stehen.

Wenn man in einer Tabellenserie auf bestimmte Zielgruppen abheben will, so kann man eine Kollektion von Zielgruppen wie folgt beschreiben:

GROUPS Zielgruppen =

| "jüngere wohl-haben-de Männer" :

Alter le 45 and einkommen ge 3000 and geschleckt eq 1

 

| "ältere wohl-haben-de Männer" : USEFONT "Courier" size 15

Alter gt 45 and einkommen ge 5000 and Geschlecht eq 1

 

| "jüngere wohl-haben-de Frauen" :

Alter le 45 and einkommen ge 3000 and geschlecht eq 2

 

| "ältere wohl-haben-de Frauen" :

Alter gt 45 and einkommen ge 5000 and geschlecht eq 2

;

Dieses GROUPS-Statement erzeugt eine VARGROUP mit dem Namen "Zielgruppen", die die vier beschriebenen Ausprägungen hat.

Auch im GROUPS-Statement können labelspezifische CELLELEMENTS vereinbart werden: z.B.:

GROUPS Neue_Group =

| "erstes label" CELLELEMENTS ( COLUMNPERCENT ABSOLUTE ) : <bedingung>

| "zweites label" CELLELEMENTS ( PHYSCOLPERCENT ABSOLUTE ) : <bedingung>

;

Für die Labeltexte gelten die üblichen Regeln zur Kennzeichnung der Trennung bei Umbruch. Einzelne Labels können mit einer eigenen Schriftart (USEFONT) versehen werden.

Else

Im letzten Element eines Groups-Statements darf die <log. bedingung> durch ELSE ersetzt werden. In diese Restkategorie werden dann alle Fälle subsummiert, die in keiner der vorangegangenen Gruppen erfasst wurden.

Man kann also z.B. schreiben:

GROUPS Neue_Group =

| "y1 EQ 1" : y1 EQ 1

| "y1 EQ 2" : y1 EQ 2

| "y1 eqEQ 3" : y1 EQ 3

| "[2] IN Neue_Group" :[2] IN Neue_Group

| "alle anderen" ELSE

;

Die ersten Zeilen sind völlig 'normal'. Die fünfte Zeile zeigt die ELSE-Komponente des GROUPS-Statements. In der vierten Zeile ist demonstriert, dass die Bedingungen auch auf die eben erst erzeugte GROUP zugreifen dürfen.


MakeGroup

Syntax:

MAKEGROUP <name> = <value>;

Mit MAKEGROUP wird eine leere Gruppenvariable mit n (<value>) Einzelvariablen generiert, die dann beispielsweise mit COMPUTE LOAD weiterverarbeitet werden kann.


Intervals

Alternatives Statement zu GROUPS für den Fall einfacher Zusammenfassungen

Syntax:

INTERVALS <newvar> = <sourcevar>  { | <labeltext> :  
<comparison> <comparevalue> }*n;

<comparison> ::= [ LT | GT | LE | GE ]

Die Verwendung von GROUPS für die Zusammenfassung verschiedener Werte einer Variablen ist möglich, aber eher schlechter Programmierstil. Ganz formal kann man das schon daran erkennen, dass der Name der Ausgangsvariablen mehrfach verwendet werden muss. Natürlich funktioniert es, wenn man Werte zusammenfassen will, auf diesem Wege:

GROUPS Interviewdauer =

| "< 1 Minute"       : [0  :59]       in SEKUNDEN_GESAMT

| " 1 - 3 Minutes"   : [60 :179]      in SEKUNDEN_GESAMT

| " 3 - 5 Minutes"   : [180:299]      in SEKUNDEN_GESAMT

| " 5 - 10 Minutes"  : [300:599]      in SEKUNDEN_GESAMT

| "10 - 15 Minutes"  : [600:899]      in SEKUNDEN_GESAMT

| "15 - 20 Minutes"  : [900:1199]     in SEKUNDEN_GESAMT

| "20 - 25 Minutes"  : [1200:1499]    in SEKUNDEN_GESAMT

| "25 - 30 Minutes"  : [1500:1799]    in SEKUNDEN_GESAMT

| "30 - 45 Minutes"  : [1800:2699]    in SEKUNDEN_GESAMT

| "> 45 Minutes"     : [2700:9999999] in SEKUNDEN_GESAMT

;

Diesem Statement ist sogar zugute zu halten, dass die jeweiligen Labels und die Bildungsvorschrift in einer Zeile kompakt zusammen stehen. Kann man so machen, ist aber nicht perfekt. Dem Puristen fällt sofort ins Auge, dass "SEKUNDEN_GESAMT" mehrfach geschrieben wird, und die hohe Redundanz - das ist immer eine mögliche Fehlerquelle.

Darüber hinaus ist es nicht effizient: um eine einfache atomare Variable in Wertebereiche zu zerlegen, werden hier zehn zusätzliche Variablen ("Interviewdauer $1", "Interviewdauer $2"….) gebildet, die bei jeder Auszählung der gruppierten Interviewdauer aus dem Input gelesen und anhand der Logik im Statement abgearbeitet werden müssen.

Am schlimmsten aber ist die Fehleranfälligkeit: die zusammenzufassenden Bereiche sind nicht vollständig, das Beispiel oben setzt voraus, dass die Ausgangsvariable ganzzahlig ist. Es ist aber überhaupt nicht gesagt, dass die Dauer des Interviews immer in ganzen Sekunden gemessen wird. In einer neuen Software-Version könnten es auch Millisekunden sein, und dann klafft zwischen 59 Sekunden und 60 Sekunden eine große Lücke: 59.245, 59.527 usw.

Also: schlechter Programmierstil.

EIne gute Alternative ist INTERVALS. Ebenso wie das GROUPS-Statement soll es eine neue Variable erzeugen, damit die Ursprungswerte erhalten bleiben.

Es ist sehr sinnvoll und zu befürworten, den Text und die Bedingungen in einer Zeile zu lesen. Deshalb jetzt:

INTERVALS Interviewdauer = SEKUNDEN_GESAMT

| "< 1 Minute"       : LT 60

| " 1 - 3 Minutes"   : LT 180

| " 3 - 5 Minutes"   : LT 300

| " 5 - 10 Minutes"  : LT 600

| "10 - 15 Minutes"  : LT 900

| "15 - 20 Minutes"  : LT 1200

| "20 - 25 Minutes"  : LT 1500

| "25 - 30 Minutes"  : LT 1800

| "30 - 45 Minutes"  : LT 2700

| "> 45 Minutes"     : GE 2700

;

Schon ein kurzer Blick macht deutlich, dass diese Schreibweise weniger redundant ist als das GROUPS-Statement, und sie ist auch übersichtlicher. Und die ärgerlichen (und teilweise schwer zu findenden) Fehler bei Nachkommastellen gehören damit der Vergangenheit an.

Als Ergebnis von INTERVALS wird eine atomare Einfachnennungsvariable (SingleQ) gebildet.

In der Praxis lauten die Bildungsvorgaben oft

Von <x> bis unter <y>

bzw.

Größer als <x> bis <y>

d.h. an den Intervallgrenzen wird eine Asymmetrie verlangt. Dem trägt die Syntax Rechnung, indem zwischen LE/LT und GE/GT unterschieden werden kann. Im obigen Beispiel ist der Stil Von <x> bis unter <y> verwirklicht, aber Größer als <x> bis <y> ist genauso einfach:

INTERVALS Interviewdauer = SEKUNDEN_GESAMT

| "< 1 Minute"       : LE 60

| " 1 - 3 Minutes"   : LE 180

| " 3 - 5 Minutes"   : LE 300

| " 5 - 10 Minutes"  : LE 600

....

Zur Behandlung von MISSING:

Alle Werte von <sourcevar>, die MISSING sind, werden nicht übertragen, auch wenn sie eine der Bedingungen erfüllen. Sei SETMISSING -1, dann erfüllt der Wert von -1 zwar die Bedingung "LT 60",  <newvar> bekommt dann aber trotzdem den Wert von SETMISSING zugewiesen.

Anmerkung:

GESStabs untersucht alle GROUPS-Statements darauf, ob alle Bedingungszeilen auf ein einfaches IN mit einem numerischen Bereich zurückgehen, und alle ein und dieselbe Variable verwenden, und diese Variable atomar ist, wie im obigen Beispiel "SEKUNDEN_GESAMT".

Ist dies der Fall, wird ein Hinweis in gtc.msg generiert: HINT: GROUPS statement building "<variable>" not recommended, try INTERVALS instead.


SPSSGroup

Relevant für den Datensatz-Output in SPSS

Syntax:

SPSSGROUP <name> = <familyvarname>;

Mit SPSSGROUP wird eine GESStabs-MultiQ (Familyvar) in ein Set aus 0/1-Variablen umgeformt, um die Weiterarbeit in SPSS mit diesen Variablen zu erleichtern. Es werden also genügend (dichotome) Einzelvariablen erzeugt, um alle Werte der ursprünglichen Mehrfachnennungsvariable zwischen 1 und dem maximalen Labelwert (maximal jedoch 300) abzubilden. Der Code (0 oder 1) dieser atomaren Einzelvariablen zeigt an, ob der ihnen zugewiesene Wert "gesetzt" ist. Anschließend wird der Inhalt der gebildeten MultiQ namens "<familyvarname>" in die neu geschaffenen DichoQs übertragen.

CondenseSPSSGroup

Voreinstellung zu SPSSGROUP, muss vorher vereinbart werden.

Syntax:

CONDENSESPSSGROUP = [ YES | NO ];

Wenn dieser Schalter auf YES steht, werden die Codes der MultiQ, die in eine SPSSGROUP gewandelt werden soll, auf die Werte 1 bis [Anzahl Labels] rekodiert. Im Effekt kann man also auf diese Weise eine MultiQ mit einem systematischen Codeplan, der viele Leerstellen enthält, auf eine dichotome Variable eindampfen, die genau die benötigte Menge an atomaren Variablen enthält, um alle Labels abzubilden. Die Labels der SPSSGROUP bestehen aus den Texten der Labels der Quell-MultiQ, denen jeweils ihr Codewert aus der MultiQ vorangestellt wird.

SPSSGroupLabel[s|0|1]

Voreinstellung zu SPSSGROUP, muss vorher vereinbart werden.

Die atomaren Variablen, aus denen eine SPSSGROUP besteht, können mit Informationen aus dem Label des entsprechenden Codes der Quellenvariable (MultiQ) versehen werden.

Syntax:

SPSSGROUPLABELS = [ YES | NO ];
SPSSGROUPLABEL1 = <TEXT>;
SPSSGROUPLABEL0 = <TEXT>;

SPSSGROUPLABELS schaltet dieses Feature ein bzw. aus. Bei YES erhält jede gebildete 0/1-Variable in der SPSSGROUP für den Code 1 das entsprechende Label aus der ursprünglichen MultiQ.

Mit SPSSGROUPLABEL1 und SPSSGROUPLABEL0 können die Label-Texte für die Variablenausprägungen 1 und 0 selbst gesetzt werden. Wird ein Text für SPSSGROUPLABEL1 definiert, dann wird der ursprüngliche Labeltext aus der MultiQ in den VARTITLE der 0/1-Variable eingetragen.

Ob man einen Text für den Code 0 vergibt oder nicht, hat keinen weitergehenden Einfluss.


Einstellungen für VarGroups

GroupCounts

Syntax:

GROUPCOUNTS <Varlist> = [ YES | NO ];

Voreinstellung: YES

Wenn man VARGROUPS bildet, kann es ja immer wieder Fälle geben, bei denen keine der Einzelvariablen zutrifft. Wenn man Tabellen fallweise zählt, hängt es von der Fragestellung ab, ob ein solcher Fall gezählt werden soll oder nicht. Wenn Tabellen auf der Basis von Nennungen gezählt werden, spielt die Einstellung keine Rolle.

Mit GROUPCOUNTS = YES; wird ein solcher Fall hinsichtlich der VARGROUP als gültig behandelt und geht in die Tabellenbasis ein, mit GROUPCOUNTS = NO; wird ein solcher Fall für die Tabelle als ungültig betrachtet und geht ggf. nicht in die Tabellenbasis ein. In Einzelzellen einer Tabelle geht ein solcher Fall natürlich nie ein (da er nicht zugeordnet werden kann).

NoInheritText, NoInheritTitle

Syntax:

NOINHERITTEXT = [ YES | NO ];
NOINHERITTITLE = [ YES | NO ];

Vartext und Vartitle der VARGROUP werden auf die einbezogenen atomaren Einzelvariablen vererbt.

Dies ist beispielsweise praktisch für die Ausgabe in SPSS.

In manchen Fällen ist es aber störend und kann mit diesen Schaltern ausgestellt werden.