Bildung neuer Variablen

<< Click to Display Table of Contents >>

Navigation:  Daten und Datensatz > Variablen in GESStabs >

Bildung neuer Variablen

Die Bildung neuer Variablen ist heutzutage eher selten nötig, ist aber in GESStabs selbstverständlich möglich und war lange Zeit eine wichtige Arbeitsgrundlage (bspw. für die Handhabung von ASCII-Datensätzen).

Während es bei der Definition von Einzelnennungs-Variablen um deren grundsätzliche Neubildung geht, besteht die Definition von Mehrfachnennungs-Variablen genau genommen in der Zusammenfassung der dazugehörigen atomaren Einzel-Variablen.

Eng verknüpft mit der Bildung neuer Variablen ist eine Syntaxsystematik, die für spaltenfixierte Datensätze charakteristisch ist, nämlich die Benennung von Spalten-Startpositionen ('<start>') und Variablenlängen ('<width>'). Diese sind bei nicht-spaltenfixierten Datenquellen, die mehr und mehr zum Standard wird, überflüssig. Diese Syntaxelemente werden aber z.B. auch bei CSVINFILE erwartet, inhaltlich aber nicht ausgewertet. Im einfachsten Fall steht in der Syntax eine 0 für die Spalte; '<width>' ist ohnehin optional und kann ausgelassen werden.

Anstelle der Spaltenbreite darf auch das Schlüsselwort BINARY stehen, allerdings nur im Zusammenhang mit einem COLBININFILE.


Einzelnennungs-Variablen

SingleQ, Variable

Syntax:

SINGLEQ <varname> =
[ TITLE <titletext> ] [ ALPHA ] [ [ start | * ] [ width | BINARY ] ]
[ LABELS [ AS <varname > | COPY <varname> | MAKE <number> | 
{ LabelEntry }*n } | LABELFROMFILE <filename> ]
;

LabelEntry ::=
[ <number> "Labeltext" | OVERCODE [ SUM ]
[ <name> ] ValueList "Overcodetext" ] [ LabelOption ]

ValueList ::=
<number>[ : <number> ] ... <number> [ : <number> ]

LabelOption ::=
{ [ LEVEL <number> | SORTCLASS <number> | USEFONT <font-specifier> 
| .... ] }*n

Synonym: VARIABLE

Einer Einzelnennungs-Variable können gleich im Zuge ihrer Bildung verschiedene Eigenschaften mitgegeben werden. Diese können aber ebenso nachträglich ergänzt oder geändert werden.

Einfaches Beispiel:

SINGLEQ V2 0
VARTEXT "Wie alt sind Sie?"
VARTITLE "Alter des Befragten" 0 
VALUELABELS

1 "bis 24 Jahre"

2 "25 bis 39 Jahre"

3 "40 bis 49 Jahre"

4 "50 und älter"

;

Die Null nach dem Variablennamen dient an dieser Stelle lediglich als platzhaltendes Element einer formell benötigten Spalten-Startposition.

MakeSingle

Alternatives Statement zur Bildung einer Einzelnennungs-Variable

Syntax:

MAKESINGLE <newvar> [ = <arithm.expression> ];

Analog zu MAKEFAMILY kann man hiermit eine atomare Variable erzeugen. Im einfachsten Fall also z.B.

MAKESINGLE nQ11_2;

Dies funktioniert nur, wenn keine Variable dieses Namens existiert, wird eine Variable erzeugt. Existiert <newvar> bereits, d.h. gibt es schon eine Variable dieses Namens, dann wird ein Syntaxfehler generiert und der Lauf abgebrochen.

In der etwas komplexeren Form kann man auch gleich einen Inhalt dieser neu gebildeten Variablen festlegen:

MAKESINGLE nQ11_2 = f22;

Dies funktioniert wie ein eingebauter COMPUTE-Befehl und ist genau genommen eine Kurzform für:

MAKESINGLE nQ11_2;

COMPUTE nQ11_2 = f22;

Wenn man also z.B. folgende Operation vornimmt:

MAKESINGLE nQ11_2 = f22;

RECODE 3=4;

... kann man (aufgrund der GESStabs-internen Syntaxprüfung) sicher sein, dass

1. nQ11_2 keine existierende Variable ist, die evtl. überschrieben wird, und

2. das RECODE auf die eben erzeugte Variable nQ11_2 angewendet wird.

Eine leere SingleQ mit der Eigenschaft ALPHA kann wie folgt erzeugt werden:

MAKESINGLE <newvar> = ALPHA;

Variables

Mit dem VARIABLES-Statement kann man eine Serie von Variablen generieren, die im Datensatz zusammenhängend abgelegt sind.

Syntax:

VARIABLES <varname><varnumberstart> TO <varname><varnumberend> 
= [ start | * ] [width];

Hinweis: start und width sind bei nicht-spaltenfixiertetn Daten auch an dieser Stelle inhaltlich überflüssig, formal aber erforderlich. d.h. da muss mindestens eine Null stehen.

Beispiel:

VARIABLES Item1 TO Item13 = 33 2;

(Item1 ist in Sp. 33-34 abgelegt, Item2 in Sp.35-36, usw. )

Das Sternchen an Stelle der numerischen Startposition besagt, dass der Variablenblock direkt anschließend an die zuletzt definierte Variable positioniert werden soll.

MakeSingles

Syntax:

MAKESINGLES <newvarlist> [ = <sourcelist> ] ;

In der einfachsten Version ersetzt dieses Statement das obenstehende VARIABLES-Statement:

MAKESINGLES f1 TO f17;

Keine der Variablen aus der Bildungsvorschrift, im Beispiel " f1 to f17", darf existieren.

Man kann anstelle des ";" mit einem "=" fortfahren:

MAKESINGLES f1 TO f17 = x18 TO x34;

Dann wird nach dem '=' eine Variablenliste erwartet, die genauso viele Elemente enthält, wie sich aus der Bildungsvorschrift ergibt. Alle diese Variablen müssen atomare Variablen sein, die nicht vom Typ ALPHA sind. MAKESINGLES ist eine Kombination aus VARIABLES und COMPUTE COPY und für Vorhaben dieser Art arbeitserleichternd.


Mehrfachnennungs-Variablen

Wie im Abschnitt zu den Variablentypen beschrieben, sind Mehrfachnennungs-Variablen in der technischen Umsetzung in GESStabs Zusammenfassungen aus mehreren atomaren Variablen. Daher sei für die Bildung bzw. Zusammenfassung mehrerer, zusammengehöriger Einzelvariablen (als Teil eines Dateninputs) auf folgende Kapitel verwiesen:

Mehrere zusammengehörige Variablen mit gleicher Labelzuordnung, MultiQ: Variablenfamilien

Mehrere zusammengehörige Variablen mit 0/1-Zuordnung, DichoQ: Variablengruppen

Alternativ können die Mehrfachnennungs-Variablen-Konstrukte auch direkt aus dem Input generiert werden. Damit werden die Einzelvariablen gar nicht mehr sichtbar.

MultiQ

Syntax:

MULTIQ <varname> =
[NOINPUT ] [ TITLE <titlestring> ] [ ALPHA ] [ start | * ] 
len [width] [ LABELS { AS <varname> | { value <text> }*n } 
| LABELFROMFILE <filename> ] ];
;

Hinweis: Für die Spaltenangabe gilt wie eingangs erwähnt, dass sie inhaltlich überflüssing geworden ist. Der Compiler erwartet an dieser Stelle aber weiterhin mindestens eine numerische Angabe. Die "tatsächliche" maximale Anzahl der Nennungen entnimmt Gesstabs der Kopfzeile des CSV-Inputfiles.

Beispiel:

MULTIQ WichtPolit = 
TITLE "Wichtige Politiker in Hamburg"

20 10 2

LABEL

1 "Voscherau"

2 "Perschau"

....

;

In Erweiterung der oben beschriebenen Syntax kann man im LABELS-Teil auch Angaben zu Label-Eigenschaften machen. Erlaubt sind: OVERCODE, SORTCLASS, LEVEL und USEFONT.

In dem Fall geht man davon aus, dass die Nennungen der "wichtigen Politiker" in den Spalten 20-21, 22-23, usw., bis 28-29, kodiert sind. Die Werte können zweistellig sein, deshalb sind für jede Nennung zwei Spalten vorgesehen.

Man könnte diese Nennungen aber auch als Text ablochen, und eine MultiQ aus 5 ALPHA-Variablen generieren, zum Beispiel:

MULTIQ WichtPolit = 
TITLE "Wichtige Politiker in Hamburg"

ALPHA

1 100 20

;

In diesem Fall würden die Politikernamen in die Felder 1-20, 21-40, usw. abgelocht werden und das Kodieren von Hand könnte entfallen.

Bei Input aus einer COLBIN-Datei kann verständlicherweise das Schlüsselwort ALPHA nicht verwendet werden.

Generell gilt für die Verwendung von * anstelle der Startspalte das Gleiche, wie für SingleQ ausgeführt wurde: Es können also auch MultiQs verschiebbar definiert werden.

Einstellungen für MultiQs

Normalize

Schalter zur internen Speicherbelegung

IgnoreMultiQOverflow

Ausgabe einer Fehlermeldung, wenn maximale Anzahl der Werte für MultiQ/ VarFamily erreicht ist

DichtoQ

Syntax:

DICHOQ <varname> =
[ NOINPUT ]
[ TITLE <titlestring> ]
{ start [ width ] <labeltext> [ SORTCLASS <number> ] [ LEVEL <number> }*n EQ value
;

An der Stelle von "value" darf auch mehr als ein Wert stehen.

Beispiel:

DICHOQ WichtThem =

TITLE "Wichtige Themen des Wahlkampfs"

22 "Gesundheitspolitik"

23 "Asylpolitik"

24 "Schulpolitik"

25 "Wirtschaft"

EQ 1;

Hinweis: Syntaktisch ist nach der Startposition die Angabe einer Feldbreite möglich. Dies bedeutet aber auch, dass man einer DichoQ keine Label geben darf, die numerisch interpretiert werden können, da der Parser darin keinen Labeltext sieht, sondern eine Feldbreite. (Anführungszeichen helfen dabei nicht weiter, denn auch Zahlen dürfen in Anführungszeichen stehen.)

Unter Verwendung von * können auch DichoQs verschiebbar definierdefiniert werden.

Beispiel:

DICHOQ WichtThem =

TITLE "Wichtige Themen des Wahlkampfs"

*   "Gesundheitspolitik"

*   "Asylpolitik"

*   "Schulpolitik"

*   "Wirtschaft"

EQ 1;

Ebenfalls erlaubt ist die Einstreuung der Label-Eigenschaften OVERCODE, Font-Informationen, LEVEL und SORTCLASS.

Beispiel:

DICHOQ WichtThem =

TITLE "Wichtige Themen des Wahlkampfs"

OVERCODEOVERCODE 1 2 "Gesundheits- und Asylpolitik" LEVEL 1 USEFONT "Helvetica-Bold" size

←֓

11

*   "Gesundheitspolitik"

*   "Asylpolitik"

*   "Schulpolitik"

*    "Wirtschaft"

EQ 1;

Die Codes von DichoQ zählen hier immer ab 1, Schrittweite 1.