Hier informieren wir Sie über ausgewählte neue Funktionen und Einstellungen für GESStabs!
Eine vollständige Dokumentation aller aktueller und vergangener Software-Updates findet sich im aktuellen Read.me.
18.11.2022: Neue CellElements: ROWPERCENT100 und COLUMNPERCENT100
Die Rundung von Prozentwerten ergibt in der Summe nicht immer 100%. Das ist für professionelle Tabellenleser/innen i.d.R. kein Problem. Für die Weitergabe an Medien werden allerdings ab und zu Tabellen gewünscht, bei denen die einzelnen ausgewiesenen Prozentwerte auf 100% addieren. D.h. die eigentlich korrekt auswiesenen Prozentwerte müssen verfälscht oder modifiziert werden. Numerisch ist dies verwandt mit der Berechnung von Sitzverteilungen. Bei den neuen CellElements wird eine fiktive Sitzverteilung auf 100 angewendet: Aus 33%, 33%, 33% wird dann 33%, 33%, 34%, und der mediale Tabellenleser ist glücklich, dass alle Verteilungen auf 100 aufgehen.
Es gibt viele verschiedene Modelle zur Berechnung von Sitzverteilungen, GESStabs verwendet die nach Hare-Niemeyer.
Es liegt in der Verantwortwung des Skripters, diese Funktiion nur dort anzuwenden, wo es sinnvoll ist. Bei Tabellen mit Variablen, die Mehrfachnennungen oder OVERCODES enthalten, wird es das i.d.R. nicht der Fall sein. Auch bei Variablen, die nicht alle Fälle ausweisen, z.b. unterdrückte MISSINGVALUES oder selektiv gebildete Variablen zur Verwendung in Köpfen, dürfte diese Form der Prozentuierung offensichtlichen Unsinn produzieren. Also: erst überlegen, dann anwenden.
01.11.2022: Handbuch 5.2
Das neue, vollständig überarbeitete und aktualisierte GESStabs-Handbuch ist ab jetzt als Online-Hilfe verfügbar: https://help.gessgroup.de/gesstabs-help/
Haben Sie bisher mit dem Handbuch 5.1 gearbeitet? Dann ist es ggfls. nötig, den Cache Ihres Browsers zu löschen, um die neue Version 5.2 einsehen zu können.
24.10.2022: Neues Featute: SHEETNUMBERCHAR
Syntax:
SHEETNUMBERCHAR = <char>;
Wenn SHEETNUMBERCHAR gesetzt ist, wird bei OFFICEEXPORT an dieser Stelle die Tabellennummer in den Namen des Excel-Sheets gesetzt.
In einer letzten Implementation hat GESStabs den allgemeinen NUMBERCHAR verwendet, um Tabellennummern einzutragen. Dies kollidierte mit anderen Verwendungen und Verwendern. Die Tabellennumer wird jetzt nur dann eingetragen, wenn der oben genannte Parameter im Skript gesetzt ist.
26.09.2022: Neues Default für HORIZONTALALIGN
Neues Default:
| HORIZONTALALIGN LABELS Y : LEFT
11.08.2022: Neues Feature: SUPPRESSEMPTYSHEET
Syntax:
SUPPRESSEMPTYSHEET = [ YES | NO ];
Wenn man statt OFFICECHAPTERPAGE das historisch ältere Statement CHAPTERTITLE verwendet, das ebenfalls ein neues Excel-Sheet erzeugt, und außerdem SUPPRESSEMPTYSHEET auf YES setzt, dann werden leere Sheets nicht in das Excel-file geschrieben.
Damit ist allerdings verbunden, dass man die übrigen Parameter von OFFICECHAPTERPAGE nicht verwenden kann.
01.08.2022: Funktionserweiterung von ASSOCFILE CSV COPY um BLACKLIST/WHITELIST
Syntax:
ASSOCFILE CSV COPY = KEY [ BLACKLIST | WHITELIST ] {}*n;
<key-variable> ::= die Schlüsselvariable im Hauptdatensatz
<key-field> ::= Name des Feldes, das als Schlüssel dienen soll
Im Anschluss an den Namen des Schlüsselfeldes kann entweder BLACKLIST oder WHITELIST stehen, gefolgt von den Feldnamen, die ausgeschlossen bzw. ausschließlich in den datensatz übernommen werden sollen.
BLACKLIST und WHITELIST wirken sich nur auf den Kopiervorgang aus. Die Feldnamen werden an dieser Stelle nur gespeichert; sie können nicht syntaktisch darauf geprüft werden, ob sie im ASSOCFILE tatsächlich vorhanden sind. Es ist also auch syntaktisch kein Fehler, wenn hier unsinnige Namen stehen. Ebenso ist eine BLACK-/WHITELIST in einem ASSOCFILE CSV ohne COPY zwar wirkungslos, aber kein Fehler.
01.08.2022: Funktionserweiterung von ASSOCFILE CSV : COPY
Syntax:
ASSOCFILE CSV COPY = <filename> KEY <key-variable> <key-field> ;
Arbeitsschritte, die häufig auftreten, möglichst einfach und praktisch zu machen, ist ein Schwerpunkt der Weiterentwicklungen bei GESS. Deshalb haben wir die Anregung gern aufgegriffen, den Import weiterer Variablen aus CSV-Files möglichst “stromlinienförmig” zu gestalten.
Wenn vor dem Zuweisungszeichen das Keyword COPY im Statement steht, werden die Variablen, die in der Kopfzeile des ASSOCFILE stehen, aus ASSOCVARS in normale Variablen kopiert. Zu diesem Zweck werden ASSOCVARS gebildet, deren Namen aus dem ASSOCFILE um ein Prefix erweitert werden; dieses lautet im Default “$ cpy”. Die Namen aus der Kopfzeile des ASSOCFILE sind dann die Namen von “normalen” Variablen. Zusätzlich werden COMPUTE-Statements generiert, die die Inhalte der ASSOCVARS in diese Standard-Variablen übertragen.
In einem Beispiel:
SPSSINFILE = data1.sav; //das sav-file enthält eine schlüssel-variable key_data
ASSOCFILE CSV COPY = "assoctest-assoc.csv" KEY key_data key_assoc;
SPSSOUTFILE = data2.sav;
// die Kopfzeile im ASSOCFILE lautet:
// key_assoc;assoc1;assoc2;$Mmmx1;$Mmmx2;$Mmmx3;$dddx1;$dddx2;$dddx3
Das SPSSOUTFILE data2.sav enthält dann 9 zusätzliche atomare Variablen aus dem ASSOC-File mit den oben aufgeführten Namen und zusätzlich zwei Mehrfachnennungsvariablen, die MULTIQ mmx und die DICHOQ ddx.
Damit ist die Erweiterung bestehender Datensätze um weitere Variablen sehr einfach. Die “normalen” Variablen werden in einer 1:1‑Zuordnung aus den ASSOCVARs gebildet.
ASSOCFILEs in der allgemeinen Form erlauben auch die Zuordnung mehrerer Zeilen mit identischen Keys in den ASSOCVARs, d.h. eine ASSOCVAR, z.B. assoc1 im obigen Beispiel, kann mehr als einen Wert enthalten. Das ist für eine atomare Variable assoc1 nicht möglich. In der speziellen Konstellation von ASSOCFILE CSV COPY darf es deshalb für jeden Schlüssel nur eine Zeile geben. Im Falle von ASSOCFILE CSV COPY wird dies überwacht. Wenn das ASSOCFILE mehrere Zeilen mit demselben Schlüssel enthält, wird der Programmlauf mit einer Fehlermeldung beendet.
22.07.2022: Syntaxerweiterung ALLOWEMPTY für CSVINFILE
Syntax:
CSVINFILE [ FILEKEY ] [ ] [ ALLOWEMPTY ] = ;
Wenn ein CSV-Infile mit ALLOWEMPTY gekennzeichnet wird, ist es erlaubt, dass diese Datei nicht existiert. Damit verhält sich CSVINFILE so wie DATAFILE oder OPENQFILE. Wenn dieser Fall eintritt, wird dies in den mMssages vermerkt.
18.07.2022: Funktionserweiterung von AUTONOANSWER
Bisher hat GESStabs AUTONOANSWER nur auf Variablen angewendet, die VALUELABELS haben; rein numerische Variablen wurden als MISSING-Fälle von der Auswertung ausgeschlossen, aber die fehlenden Werte nicht wie bei gelabelten Variablen ausgegeben. Ab Version 5.2.1.16 werden die fehlenden Werte wie bei gelabelten Variablen unter dem im AUTONOANSWER-Statement Text zusammengefasst. Falls dies nicht gewünscht ist, muss man jetzt die variablenbezogene Version von AUTONOANSWER verwenden, um dieses Verhalten auszuschalten:
AUTONOANSWER = NO;
18.07.2022: Neues Steuerungselement für OFFFICEEXPORTOPTIONS: XLABELSIGNCHARBOX
Syntax:
....
| XLABELSIGNCHARBOX LABELS X : YES
....
Die Positionierung der automatisch vergebenenen Siginifikanzbuchstaben funktionierte in PS/PDF, war bei OFFICEEXPORT teilweise aber unschön. Mit der neuen Option XLABELSIGNCHARBOX wird für diese Buchstaben eine zusätzliche Excel-Zeile erzeugt, in die diese ausgegeben werden. Die PS/PDF-Zeilenumbrüche werden ignoriert, und es wird ein Umbruch in Excel erzeugt; d.h. XLABELSIGNCHARBOX verhält sich in dieser Hinsicht wie FLOWTEXT. Bei anderen Boxtypes als LABELS X wird die Option ignoriert.
11.07.2022: Neues Feature: INHERITBACKGROUND und INHERITFOREGROUND
Analog zu INHERITFONT kann man hiermit die Vererbung der Hintergrund-/Vordergrund-Farbe aus dem Label in die Datenzellen der Tabelle einschalten.
Syntax:
INHERITBACKGROUND X | Y ] = [ YES | NO ];
INHERITFOREGROUND[ X | Y ] = [ YES | NO ];
Wählt man die Variante mit X, werden die Farben aus der X‑Achse (i.dR. Tabellenkopf) vererbt, d.h. alle Zellen, die sich vertikal unterhalb des Labels befinden. Bei der Variante Y werden Farben aus der Y‑Richtung horizontal vererbt.
07.07.2022: Neues Feature zur Steuerung der Tabellenausgabe: SORTPOSITION AFTER, SORTPOSITION LINE
Zusätzliche Labeleigenschaften von OVERCODE zu genauen Platzierung von OVERCODE-Zeilen in Tabellen, die mit AUTOSORTTREE anstelle von AUTOOVERSORT sortiert wurden.
Syntax:
OVERCODE ....... SORTPOSITION AFTER
OVERCODE ....... SORTPOSITION LINE
Bei der hierarchischen Sortierung von (OVER)OVERCODEs sind Overcodes ein Problem, die mit der identischen Menge von Codes definiert wurden. GESStabs sortiert diese Doubletten aus. Unternimmt der Benutzer nichts, erscheinen sie am Ende der Tabelle. Mit den SORTPOSITIONs kann der Scripter gezielt eingreifen.
07.07.2022: Neues Feature: RECHIPREFIX
Syntax:
RECHIPREFIX = ;
Eine praktische Möglichkeit, um in Tabellen, die mittels AUTOSORTTREE sortiert werden, die Zeilen zu kennzeichnen, die “übrig geblieben” sind. Die Zeichenfolge wird dann am Beginn des Labeltextes eingefügt.
04.07.2022: TABLEFORMAT AUTOSORTTREE
Die hierarchische Sortierung von Codes und Overcodes wurde neu implementiert.
Die seit Langem eingesetzte Methode AUTOOVERSORT hat Schwächen: Der AUTOOVERSORT-Algorithmus, den es weiterhin gibt, basiert auf einer einzigen Sortierung der Gesamttabelle mit mehrfachen Häufigkeiten. Wie sich herausgestellt hat, hat diese Methode die Hierarchie der Codes und Overcodes in einigen Fällen nicht richtig abgebildet.
Neben AUTOOVERSORT tritt jetzt AUTOSORTTREE. An die Stelle der Sortierung in einem Rutsch mit mehreren Sortierkriterien tritt dann eine kleinteiligere baumorientierte Methode.
Bestehende Skripte, in denen AUTOOVERSORT verwendet wird, werden unverändert nach der AUTOOVERSORT-Methode abgearbeitet.
Die beiden Methoden sind nicht kompatibel; daraus ergibt sich, dass die Verwendung beider TABLEFORMATs zu einem Fehlerabbruch (Syntaxfehker 744) führt.
Eine ausführliche Doku mit Beispielen ist im GESStabs-Handbuch zu finden.
13.06.2022: FOREGROUND und BACKGROUND für das Ergebnis von CALCULATECOLUMN
Syntax:
CALCULATECOLUMN <zielspalte> [ FORMAT <format> ] [ FOREGROUND <rules> ] [ BACKGROUND <rules> ] = <arithemtischer spaltenausdruck>;
<rules> ::= ( { <rule> }*n )
<rule> ::= [ GE | GT ] <number1> [ LT | LE ] <number2> :
Es ist ein Syntaxfehler, wenn die Bedingung <number1> <= <number2> nicht erfüllt ist.
Z.B.:
CALCULATECOLUMN <1 1> BACKGROUND ( GE 12 LE 15 : $D0D0FF GE 15 LT 21 : E0E0FF ) = <1 2> / <1 3>;
Die einzelnen Bereiche können sich überlappen; es gilt der letzte “treffer”.
Z.B.:
CALCULATECOLUMN <1 6>
FOREGROUND ( ge 3 le 99 : $ff0000 )
BACKGROUND ( ge 2 le 3 : $e0e0ff ge 0 le 2 : $d0d0ff )
FORMAT "#,#"
= <1 4> / <1 1> ;
Der Wert 2 als Ergebnis wäre ohne die Regel oben nicht eindeutig; die Zelle wird mit $d0d0ff und nicht mit $e0e0ff gefärbt. Die letzte Zeile könnte auch in zwei getrennten BACKGROUND-Regeln beschrieben werden. Gleichbedeutend wäre:
BACKGROUND ( ge 2 le 3 : $e0e0ff ) BACKGROUND ( ge 0 le 2 : $d0d0ff )
An dem Vorrang von $d0d0ff würde sich nichts ändern.
02.05.2022: Neues Feature: INVERTIN kann aus mehreren Files nacheinander lesen
Syntax:
INVERTIN = file1;
INVERTIN = file2;
....
Ähnlich wie bei CSVINFILE und SPSSINFILE kann man jetzt mehrere invertierte Systemdateien nacheinander einlesen. Dieses Feature ermöglicht es unter anderem, unterschiedlich gewichtete Teilmengen wieder in eine Gesamtdatei zusammenzufassen.
Beispiel:
run1:
INVERTIN = gesamt.inv;
SELECT split EQ 1;
WEIGHTCELLS = .....
INVERTFILEWEIGHTOUT = w1;
INVERTOUT = split1.inv;
END;
run2:
INVERTIN = gesamt.inv;
SELECT split EQ 2;
WEIGHTCELLS = .....
INVERTFILEWEIGHTOUT = w1;
INVERTOUT = split2.inv;
END;
In run3 werden die beiden invertierten Dateien nacheinander eingelesen. Nach dem ersten INVERTIN-Statement wird der schalter NOINVERTADDON auf YES gesetzt, um das Einlesen der automatisch erzeugten JSON-Beschreibung und GESStabs-syntax zu blockieren. Im INC-File können nämlich Statements stehen, die nicht mehrfach auftreten dürfen, so z.B. Variablengeneriereng mittels VARFAMILY oder VARGROUP, die einen Syntaxfehler ausgeben, wenn die zu ereugende Variable bereits existiert. Es ist also sicherer, das Einlesen dieser Files nach dem ersten INVERTIN-Statement zu unterbinden.
run3:
INVERTIN = split1.inv;
NOINVERTADDON=YES;
INVERTIN = split2.inv;
USERWEIGHT = w1;
INCLUDE = tab.inc;
end;
Inhaltlich konnte man dasselbe mittels CSV- oder SPSS-sav-Files bereits vorher tun; bei sehr vielen Fällen kann man durch die binäre invertierte Speicherung aber einen gGeschwindigkeitsvorteil erreichen.
26.04.2022: Neues Statement DOUBLECODEINOVERCODE
Syntax:
DOUBLECODEINOVERCODE = [ YES | NO ];
Default: NO
Ist in den OVERCODEs einer Variablen ein Code mehrfach vergeben, ist die Zuordnung dieses Codes zu einem OVERCODE nicht mehr eindeutig. Diese Konstellation führt bei AUTOOVERSORT zu nicht lösbaren Sortierungen — im Klartext: die Sortierung ist dann falsch.
Dieser Fehler ist manchmal schwer zu erkennen. Setzt man diesen Schalter auf YES, wird beim Einlesen der OVERCODEs überwacht, dass jeder Originalcode nur einmal in allen OVERCODEs einer Variablen auftritt, es wird ein Warnhinweis generiert und in die Messages (gtc.msg) ausgegeben, und anschließend wird GESStabs mit einem Syntaxfehler beenden.
Zu Default NO: Es ist im engeren Sinne kein syntaktischer Fehler; es kann sinnvoll sein, einen Code mehr als einem OVERCODE zuzuordnen. Der Algorithmus zum AUTOOVERSORT funktioniert dann aber nicht. Für Labels, die in AUTOOVERSORT-Tabellen verwendet werden, dürfte es sinnvoll sein, diesen Schalter auf YES zu setzen.
23.03.2022: Syntaxerweiterung LABELS bzw. VALUELABELS ADD
Syntax:
LABELS = [ ADD [ POSITION <number> ] ]
<ein neues Label>
;
Im Anschluss an das Keyword ADD kann man jetzt die Position vorgeben, an der das neue Label in die Labelliate eingefügt werden soll. Die Zählung ist 1‑basiert. Fügt man über ein LABELS … ADD POSITION ein, sollte man dies auf ein neues Label beschränken. Auch mehrere Labels werden syntaktisch zwar akzeptiert, hiervon wird aber abgeraten.
will man z.B. ein Label vor allen bestehenden einfügen, so schreibt man z.B.:
LABELS testvar = ADD POSITION 1
7 "label zum neuen code 7 am anfang der liste"
;
Wenn man ein LABEL/OVERCODE an eine Position einfügen will, die so nicht “existiert”, wenn man z.B. an POSTIION 5 an einer Liste von Valuelabels mit nur 3 Labels einfügen will, wird dieses Label einfach ans Ende der Liste angehängt, so, als ob keine POSITION angegeben wäre.
Es ist auch möglich, einen zusätzlichen OVERCODE einzufügen, z.B.:
LABELS OCTEST = ADD POSITION 1
OVERCODE 1 2 3 "OC 1 2 3"
;
OVEROVERCODE können hiermit nicht eingefügt werden.
20.03.2022: Neue Labeleigenschaften: BACKGROUND FOREGROUND
Syntax:
...
labels
...
<code> <text> ... FOREGROUND <color>...
<code> <text> ... BACKGROUND <color>...
Man kann einzelnen Labels jetzt auch Farbinformationen für Vordergrund (Schriftfarbe) und Hintergrund mitgeben. Das funktioniert bei Kreuztabellen in PS und PDF.
Zum Beispiel:
LABELS OCTEST =
OVERCODE 1 2 3 "OC123"
* EINS BACKGROUND 0.99 0.95 0.80
* ZWEI BACKGROUND $EEFFFF
* DREI BACKGROUND $DDDDDD
* VIEL
* FÜNF
;
Farben können sowohl in der PS-typischen Notation als 3 Floats zwischen 0 und 1 als auch als hexadezimale Zahl (mit $ eingeleitet) angegeben werden. Über die OFFICEXPORTOPTIONS USEPOSTSCRIPTCOLORS kann man die Farben der Labels aus PS auch in den OFFICEEXPORT übertragen. Wie gehabt haben explizite Farbsetzungen in den OFFICEXPORTOPTIONS vorrang.
Beispielsweise:
OFFICEXPORTOPTIONS =
| USEPOSTSCRIPTCOLORS LABELS Y : YES
...
20.03.2022: Erweiterung von NOOCINHEADER NOOCINSTUB
Syntax:
NOOCINHEADER = [ YES | NO ];
Unterdrückung von OVERCODES im Tabellenkopf bzw. in der ‑vorspalte
Die bisherige Implementierung erlaubte zwar die Verwendung dieser Steuerung, aber nur global für den ganzen Tabellierlauf. Jetzt sind diese Statements Voreinstellungen; sie gelten für alle Tabellen in der Folge, bis sie durch ein weiteres Statement neu gesetzt werden.
10.03.2022: Neues Feature in OFFICEEXPORTOPTIONS
Syntax:
...
...
TEXTROWHEIGHT <box> : <pixels>
...
<box> ::= TABLETITLE TOPTEXT LABELS X etc.
<pixels>::= gewünschte Zeilenhöhe in Pixel
Beim Anlegen einer neuen Zeile, die zu einer gehört, wird die Höhe der Zeile auf diesen Wert gesetzt. Das ist eher eine verzweifelte Maßnahme, wenn man die Füllung einer Excelzelle oder eines Range von Zellen anders optisch nicht in den Griff bekommt.
08.03.2022: Neues Feature: OPENCSV
Syntax:
NEWOPENFORMAT = [ YES | NO ];
OPENCSV = [ YES | NO ];
mit der kommandofolge
NEWOPENFORMAT = YES;
OPENCSV = = YES;
OPENQFILE = openscoded_onlycodes.csv;
Man kann GESStabs anweisen, aus der Datei rein numerische Codes für die offenen Fragen zu importieren. Die Struktur, die erwartet wird, entspricht dem, wie sie bei GESS oft verwendet wird:
;;;; .….
Die Variablen, die im OPENQFILE verwendet werden, können entweder in der üblichen Syntax im Skript vor dem OPENQFILE-Statement definiert werden, oder man lässt sie mit OPENAUTOGENERATE automatisch erstellen.
07.03.2022: Neues Feature: OPENAUTOGENERATE
Syntax:
OPENAUTOGENERATE = [ YES | MULTIQ [ PREFIX ] ] | ALPH [ PREFIX ] ];
Wenn in einem OPENQ-File Variablen referenziert werden, die nicht im Script definiert sind, dann können diese Variable erzeugt werden. Diese einfachste Version besteht nur aus dem Keyword YES: OPENAUTOGENERATE = YES;
Handelt es sich um eine Variable, für die bereits Code-Values eingetragen sind, kann man mit einer der unten aufgeführten Varianten diese in eine MULTIQ ablegen lassen. Die Größe dieser MULTIQ kann im Statement vereinbart werden. der Name der zu bildenden Variable besteht aus einem Prefix, default “M_”, und dem Namen der OPQENQ.
Zum Beispiel:
OPENAUTOGENERATE = MULTIQ 5;
Das Prefix kann im Statement explizit angegeben werden.
OPENAUTOGENERATE = MULTIQ 5 PREFIX "mul";
Es ist auch möglich, die Texte im OPENQ-File in eine OPENASALPHA ablegen zu lassen, die denselben Namen trägt wie die OPENQ.
OPENAUTOGENERATE = ALPHA;
Zusätzlich kann eine “echte” Alpha-Variable generiert werden, indem man einen von Default “” abweichenden Prefix definiert, z.B.:
OPENAUTOGENERATE = ALPHA PREFIX "alpha";
Das Folgende ist ein bisschen tricky:
Es ist wahrscheinlich hilfreich, wenn man sich den Entstehungszeitpunkt der durch OPENAUTOGENERATE generierten Variablen vergegenwärtigt. Diese stehen erst nach dem Einlesen des OPENQFILE zur Verfügung, und dies kann auch nicht anders sein, aus diesem File stammen ja die benötigten Informationen (Variablennamen). Die OPENQFILEs haben im Ablauf von GESStabs eine Sonderstellung, denn deren Inhalte müssen ja während des Einlesens der Daten (SPSSINFILE, CSVINFILE, DATAFILE etc.) aufgrund des Schlüssels “geholt” werden. Es gibt zwischen dem Ablauf des Compilers und der Datenauswertung eine “Zwischenzeit”, in der OPENQFILEs und ASSOCFILEs verarbeitet werden. Diese “Zwischenzeit” ist notwendigerweise nach dem Abschluss des Compilerlaufs, sodass man in der Syntax, sprich während des compilerlaufs, nicht auf die OPENAUTOGENERATE-Variablen zugreifen kann. Man kann sie also im Ablauf des Skripts zu ihrer Erzeugung nicht “anfassen” und z.B. tabellieren. Folglich muss man einen kleinen Umweg nehmen, und erst ein SPSS-sav-File oder GESS-inv-File bauen, bevor man sie tabellieren kann. Das funktioniert, weil die Variablen für ein globales SPSSOUTFILE erst nach dieser “Zwischenzeit” zusammengestellt werden; auch mit den invertierten Datensätzen (INVERTOUT) ist dies möglich. INVERTOUT/INVERTIN ist die beste Wahl, weil hier alle Syntaxelemente bewahrt werden, neben dem VARTITLE z.B. auch der VARTEXT. Das STORETOSPSS-Statement hingegen kann dies ebensowenig wie das STORETOCSV-Statement, da diese die Variablenliste in der Compile-Zeit
zusammenstellen. In beiden Fällen muss man die Variante wählen, die ALLE Variablen exportiert, also OHNE STORETOSPSS bzw. STORETOCSV. Das ALL im STORETOCSV tut’s nicht, es listet lediglich alle Variablen auf, die zur Compile-Zeit vorliegen.
03.03.2022: CONTENTPAGE: neues feature für OFFICEEXPORTOPTIONS EDIT
Syntax:
OFFICEEXPORTOPTIONS EDIT OFFICECONTENTPAGE =
...
...
;
In diesem Falle wird eine Kopie der gerade gültigen OFFICEOPTIONS erstellt, und an einem speziellen Ort für den Zugriff während der Bearbeitung der OFFICECONTENTPAGE gespeichert. Alle weiteren Statements bis zum Semikolon haben dann nur einen Effekt in der OFFICECONTENTPAGE. Diese speziell gespeicherten Daten können nicht mit EDIT wieder modifiziert werden; wird ein weiteres OFFICEOPTIONS EDIT OFFICECONTENTPAGE gefunden, beginnt diese Modifikation wieder auf der Basis der gerade gültigen OFFICEOPTIONS-Werte.
03.03.2022: Neue syntax zum Exportieren von Daten im CSV-Format
Diese Syntax besteht aus den folgenden 5 Einzelstatements:
1. CSVOUTFILE
2. STORETOCSV
3. NOCSV
4. CSVWEIGHTOUT
5. ENCODING CSVOUTFILE
6. ASCIIOUTDECIMALCHAR
1. Syntax:
CSVOUTFILE = <name> ;
kann ein vollständifer Pfad oder nur ein Dateiname sein. Die Extension wird automatisch auf ‘CSV’ gesetzt.
2. Syntax:
STORETOCSV = [ ALL | <varlist> ];
Wird ALL angegeben, werden alle bekannten SINGLEQ, MULTIQ und DICHOQ in die Liste der zu exportierenden Variablen eingetragen, wenn sie nicht als Systemvariablen gekennzeichnet sind.
Ebenso wird mit allen Variablen in der explizit angeebenen Variablenliste verfahren.
3. Syntax:
NOCSV <varliste> = YES;
Alle Variablen in der angegebenen Variablen werden als nicht zu exportieren gekennzeicnet. Dieses Exportverbot gilt auch dann, wenn sie im STORETOCSV-Statement explizit angesprochen wurden.
4. Syntax:
CSVWEIGHT = <varname> ;
Unter dem angegebenen Namen wird eine Gewichtungsvariable ins CSV-File exportiert. Wenn ein Systemgewicht besteht, z.B. aufgrund von einer iterativen Gewichtung aufgrund von WEIGHTCELLS oder als USEWEIGHT, wird dieser Wert exportiert.
5. Syntax:
ENCODING CSVOUTFILE = [ ANSI | UTF8 ];
Man kann auch das Encoding der Ausgabedatei festlegen.
6. Syntax:
ASCIIOUTDECIMALCHAR = ;
Wenn Excel mit den Daten zufrieden sein soll, muss man ASCIIOUTDECIMALCHAR = ‘,’; setzen.
17.02.2022: Neue Option in OFFICECONTENTPAGE: TEXTBOX
Syntax:
OFFICECONTENTPAGE =
.....
| TEXTBOX
: BOXTEXT
"<text, darf mehrzeilig sein>"
: POSITION "b20:e23" FONT "Courier-new" SIZE 13
DRAWBOX WEIGHT [ THIN | MEDIUM | THICK ] BORDERS [ TOP | BOTTOM | LEFT| RIGHT | ALL ] COLOR $
FOREGROUND $<number>
BACKGROUND $<number>
.....
Hiermit kann man auch Linien erzeugen, dafür muss der BOXTEXT leer sein. Man kann dann in der BORDERS-Komponente z.B. für eine waagerechte Linie TOP oder BOTTOM wählen. Die Länge der Linie ergibt sich dann aus der Dimension in POSITION. Zum Beispiel:
.....
| TEXTBOX
: BOXTEXT ""
: POSITION "b25:e25"
DRAWBOX WEIGHT MEDIUM BORDERS BOTTOM COLOR $000000
.....
Auf einer OFFICECONTENTPAGE können beliebig viele TEXTBOX-Substatements verteilt werden. Es ist sicher auch weiterhin eine gute Idee, die Elemente absteigend von links nach rechts zu vergeben. Der Algorithmius ist aber jetzt so modifiziert, dass auch eine beliebige Reihenfolge richtig plaziert wird.
07.02.2022: Neue Optionen in den OFFICEXPORTOPTIONS
1. EXCELCALCROWHEIGHT
Syntax:
| EXCELCALCROWHEIGHT : [ YES | NO ]
Bisher wurde die benötigte Zeilenhöhe durch das OFFICEEXPORT-Interface berechnet. Das war ofensichtlich nicht immer zufriedenstellend. Es gibt jetzt eine neue Option in den OFFICEXPORTOPTIONS: Setzt man hier EXCELCALCROWHEIGHT auf YES, wird von GESStabs über das Interface keine Vorgabe gemacht, und Excel berechnet das selbst. Diese Option wurde bislang nicht in GESStabs verwendet, weil als Warnung vermerkt ist, dass es manchmal zu Ungenauigkeiten bei der Positionierung von Charts und Bildern kommen kann. Optisch sieht es so in den meisten Fällen gefälliger aus.
2. FIRSTCOLUMN
Syntax:
| FIRSTCOLUMN :
Wenn man eine Zahl n größer 1 angibt, werden solange leere Zellen (n‑1) vor jeder Tabellenzeile eingefügt, dass die erste Spalte entsprechend positioniert ist.
3. CALCROWHEIGHT
Syntax:
| CALCROWHEIGHT : [ EXCEL | MULTILINE | SINGLELINE ]
Das Interface zur Erzeugung von OFFICEXPORT bietet drei Vorgehensweisen an, die hiermit durch den/die Scripter/in explizit gesetzt werden können.
EXCEL: Von Seiten des Interfaces werden keine Vorgaben gemacht; Excel entscheidet.
MULTILINE: Das Interface berechnet die Zeilenhöhen selbst beim Export.
SINGLELINE: Das Interface berechnet die Zeilenhöhe einer einzelnen Zeile selbst beim Export.
Die letzte Version dürfte in Tabellen nur selten sinnvoll sein; es ging darum, alle Optionen, die das OFFICEXPORT-Interface anbietet, im Script auswählbar zu machen.
Snmerkung: Bei langwierigen Fehlersuchen ist aufgefallen, dass einzelne Fonts sich im Export unterschiedlich verhalten. Manchmal mag es bei langwierigen Versuchen, ein anständiges Schriftbild zu erhalten, sinnvoll sein, testhalber einen anderen Font zu wählen. Unerwünschte Effekte sind bei Open Sans aufgefallen.
07.02.2022: Neues Feature: COLORIFBASELESS
Dies ist eine neue Methode, um Werte in Tabellen zu kennzeichnen, die aufgrund zu geringer Basis nicht oder sehr zurückhaltend interpretiert werden sollten. Zur Darstellung wird eine abweichende FOREGROUND-Color für die betroffenen CELLELEMENTS in der Tabelle verwendet. Formal setzt dies eine Voreinstellung, die für alle Tabellen gilt, die danach vereinbart werden.
Syntax:
COLORIFBASELESS <place> <test> <number> [ <cellelement> ] = <color>;
<place> ::= [ FRAMECELL X | FRAMECELL X | DATACELL ]
<test> ::= [ ABSOLUTE PHYSICALRECORDS VALIDN VALIDPHYS ]
<number> ::= Schwellenwert, bei dessen unterschreitung die farbe geändert werden soll
<cellelement> ::= das betroffene CELLELEMENT. wird dieses weggelassen, sind alle CELLEMENTS betroffen
<color> ::= die (ausgegraute) Farbe, die dann verwendet werden soll
COLORIFBASELESS = NO; setzt alle Regeln zurück.
Für alle erlaubten s kann man jeweils eine regel vereinbaren, also maximal 3.
z.B.:
ColorIfBaseLess FrameCell Y absolute 50 rowpercent = $cccccc;
ColorIfBaseLess FrameCell X absolute 50 columnpercent = $cccccc;
ColorIfBaseLess datacell ValidN 60 MEAN = $FFcc00;
Es wird empfohlen, bei der Kombination mehrerer Regeln IMMER ein CELLELEMENT anzugeben.
Will man die Ausgabe von Mittelwerten in DATACELL beeinflussen, ist es empfehlenswert, VALIDN statt ABSOLUTE zu verwenden, da dies der schärfere Test ist. In einer Spalte können mehr fälle enthalten sein, als in den Mittelwert einfließen, z.b. wegen Missing Values oder eines Filters. Damit diese Regeln auch in einem OFFICEEXPORT greifen, muss man in den OFFICEXPORTOPTIONS den Schalter ‘| USEPOSTSCRIPTCOLORS DATACELL : YES’ setzen.
Explizite Farbeinstellungen in den OFFICEXPORTOPTIONS, z.B. ELEMENTCOLOR, gelten vorrangig.
05.10.2021: Neue Option POSITION im OFFICECHART-Statement
Syntax:
OFFICECHART =
...
| POSITION <excelcell>
...
Mit ‘’ ist eine Zelle in der üblichen Excel-Notation (z.b. ‘P7’) gemeint. GESStabs wird das Chart dann so anlegen, dass die linke obere Ecke in dieser Zelle liegt.
Ein OFFICECHART ohne eine POSITION-Angabe wird wie bisher unter die Tabelle bzw. das vorangegangenen Chart positioniert. Die absolute Positionierung hat den Vorteil, dass man die Position im Script einfach und exakt festlegen kann. Wenn man mehrere Tabellen auf einem Worksheet anlegt, ist es teilweise nicht so einfach, eine sinnvolle absolute Adresse anzugeben, wenn z.b. die Breite und die Länge der Tabellen differieren. Am praktischsten dürfte es dann sein, generell für jede Tabelle ein eigenes Worksheet anzulegen.
30.09.2021: Neues Feature: OFFICEPICTURE im OFFICECONTENTPAGE-Statement
Syntax:
OFFICECONTENTPAGE =
...
| OFFICEPICTURE
:FILEPATH <filepath>
:SIZE X <number>
:SIZE Y <number>
:POSITION <excelcell>
...
;
Zum Beispiel:
OFFICECONTENTPAGE =
| OFFICEPICTURE
:FILEPATH gess.ico
:SIZE X 40
:SIZE Y 40
:POSITION "k2"
| NAME : Inhalt
| noAutoTabletitle : yes
;
30.09.2021: Neues CellElement: HYWELCHTEST
Zum Testen von Mittelwertsunterschieden ist in Tabellen der T‑Test nach Welch dem üblichen t‑Test nach Student überlegen, da er unempfindlich ist gegenüber Unterschieden in den Varianzen in den zu vergleichenden Zellen.
Um es schärfer zu formulieren: In Tabellen mit Student’s T‑Tests im Hintergrund können signifikante Unterschiede ausgewiesen sein, die anhand der nicht überprüften Homogenität der Varianzen nicht immer haltbar sind. GESS empfiehlt daher, in Tabellen den robusteren T‑Test nach Welch zu verwenden. Dieser wurde Anfang des Jahres als WELCHTEST, PHYSWELCHTEST und XWELCHTEST implementiert. Wir liefern jetzt den hybriden HYWELCHTEST nach. Eine Besonderheit des T‑Test nach Welch ist die Tatsache, dass in die Berechnung der Freiheitsgrade für den T‑Test auch die Varianz in den Zellen einfließt. GESStabs berechnet die Freiheitsgrade im hybriden Test anhand der ungewichteten Zellenbesetzung (PHYSICALRECORDS) und der gewichteten Varianz in den Zellen.
14.09.2021: Neues Feature ALIAS
Syntax:
ALIAS <list of varkeys> : <labeltext_kanonisch> = <list of aliases> ;
Ähnlich wie die Eigenschaft VARKEY eine Möglichkeit eröffnet, Fragen mit gleichem Inhalt aber unterschiedlichen variablennamen als “gleich” zu kennzeichnen, dient das ALIAS-Feature dazu, verschiedene Labeltexte als gleichwertig zu behandeln. Wenn eine Variable mit gleichem VARKEY in verschiedenen Projekten verwendet wird, ist damit für liveTABS definiert, dass sie denselben Sachverhalt bezeichnen. Nun kann es aber immer wieder passieren, dass die Labeltexte variieren, obwohl derselbe sachverhalt gemeint ist. Hierbei kann es sich um minimale Textunterschiede handeln, z.b. wird in Studie A “65 Jahre und älter” vorgegeben, in Studie B wird “Jahre” aber als “J.” abgekürzt. der Labeltext könnte in einer Studie C aber auch “>=65 Jahre” lauten.
Das ALIAS-Statement bietet nun die Möglichkeit, einen “kanonischen” Text zu definieren, der bevorzugt verwendet werden soll. Alle anderen Varianten können dann als ALIAS-Varianten aufgeführt werden, die durch den kanonischen Text zu ersetzen sind. Diese ALIAS-Abbildungen können in der JSON-Tabellenausgabe an liveTabs übermittelt werden (siehe STOREALIAS im Read.me). Sie können aber auch unmittelbar in der Tabellierung angewendet werden (siehe REPLACEALIAS im Read.me).
Es ist in aller Regel sinnvoll, solche ALIAS-Regeln in standardmäßig inkludierte Dateien auszulagern, indem man entweder die FMT-Datei erweitert, oder eine spezielle Include-Datei ALIAS.inc einrichtet.
07.09.2021: Neue Features in OFFICEEXPORTOPTIONS
Syntax:
SUPPRESSGRIDLINES : [ yes | no ]
FIXLABELROWS : <number>
SUPPRESSGRIDLINES : YES unterdrückt die excel-typischen Gridlines in der Bildschirmdarstellung.
FIXLABELROWS wird den <number> Zeilen Teil der Tabelle “fix” halten, sodass diese sichtbar bleiben, wenn man das Fenster vertikal scrollt. Pro Sheet kann nur ein FIXLABELROWS-Paremeter ausgewertet werden.
01.03.2021 (5.2.0.14): Neue Cellelements zum Konfidenzintervall
Zur Darstellung der Grenzen des CONFIDENCERANGE gibt es zusätzliche CELLELEMENTS: Für die CONFIDENCERANGE: CONFIDENCERANGEUPPER für die Obergrenze CONFIDENCERANGELOWER für die Untergrenze Für die COLUMNPERCENTRANGE: COLUMNPERCENTRANGEUPPER für die Obergrenze COLUMNPERCENTRANGELOWER für die Untergrenze Für die ROWPERCENTRANGE: ROWPERCENTRANGEUPPER für die Obergrenze ROWPERCENTRANGELOWER für die Untergrenze.
22.02.2021 (5.2.0.13): Neue Cellelements: WELCHTEST PHYSWELCHTEST XWELCHTEST
Der Student’s t‑test wurde durch den als “robuster” eingeschätzten t‑test nach Welch ergänzt. dieser erscheint für tabellarische Darstellungen besser geeignet, da die Homogenität der Varianzen nicht wie bei Student’s t‑test zu den Anwendungsvoraussetzungen zählt. GESS hat den Test nach Welch zunächst in drei Formen implementiert:
-
- Standard (WELCHTEST, ggf. gewichtet)
-
- ungewichtet (PHYSWELCHTEST)
-
- und die kombination dieser beiden als crosscheck (XWELCHTEST)
Bei letzterem wird die Siginifikanz nur dann angezeigt, wenn die beiden anderen Varianten dies stützen. Man kann diesen t‑test auf Mittelwertunterschiede stets dort einsetzen, wo bislang TTEST und deren Varianten PHYSTTEST oder XTTEST verwendet wurden. Der Test nach Welch ist ein wenig “konservativer” als der Test nach student, d.h. der p‑wert, der über die Ausweisung einer Kennzeichnung entscheidet, kann ein wenig größer sein als bei student. In Grenzfällen kann es also vorkommen, dass ein Zusammenhang, der nach student noch als (grenzwertig) signifikant erscheint, bei Welch’s t‑test nicht ausgewiesen wird. Man sollte dies aber nicht als Nachteil bewerten. Der erhebliche Vorteil liegt darin, dass man sich hierbei keine Gedanken machen muss, ob die Varianzen in den untersuchten Zellen hinreichend ähnlich sind.
04.01.2021 (5.2.0.11): Neues Statement: SUPPRESSSPSSWARNINGS
Syntax:
SUPPRESSSPSSWARNINGS = [ ALPHA | VARLABEL | VALUELABELS ] ;
Beim Einlesen mehrerer SAV-files generiert GESStabs Warnungen, wenn sich der Alpha-Status, ein VARLABEL oder ein VALUELABEL ändert.
Mit SUPPRESSSPSSWARNINGS werden diese Warnungen abgeschaltet.
Beispiel:
SUPPRESSSPSSWARNINGS = ALPHA VARLABEL VALUELABELS;
Hier werden bspw. alle diesbezüglichen Warnungen abgeschaltet.
17.11.2020 (5.2.0.9): Neues Tableformat: ELIMINATEEMPTYLINE
Über das Entfernen unerwünschter Leerzeilen in Tabellen vom Typ OVERVIEW durch das TABLEFORMAT NOVARTITLEBOX ergaben sich unerwünschte Nebeneffekte.
NOVARTITLEBOX erfüllt diese Funktion jetzt nicht mehr.
Stattdessen besteht nun die Möglichkeit das spezielles TABLEFORMAT ELIMINATEEMPTYLINE zu benutzen.
18.05.2020 (5.2.0.1): Neue Parameter für OFFICEEXPORTOPTIONS: OFFICEFORMAT und THOUSANDS
Um der Tatsache Rechnung zu tragen, dass die Ausgabe in Excel vergleichsweise einen breiteren Raum einnimmt, wurden speziell für diese Ausgabedatei neue Parameter entwickelt.
Syntax:
OFFICEEXPORTOPTIONS [ EDIT ] =
...
| OFFICEFORMAT <cellelement> : <formatstring>
| THOUSANDS <cellelement> : [ YES | NO ]
...
Mit OFFICEFORMAT lassen sich verschiedene Formate definieren, die ohne weitere Prüfung an Excel übergeben werden. Für die Nutzung sind Kenntnisse über verschiedene Excel-Formatanweisungen sicher hilfreich.
Im folgenden Beispiel etwa werden die Summen in Exponentialdarstellung angefordert:
Beispiel:
| OFFICEFORMAT SUM : "#.##E+0"
Mit dem THOUSANDS-Parameter können Tausendertrennzeichen im OFFICEEXPORT für einzelne Zellenelemente ein- und ausgeschaltet werden.
Im folgenden Beispiel etwa werden sie für die Summen eingeschaltet:
Beispiel:
| THOUSANDS SUM : YES
Hier handelt es sich um eine eingängigere Schreibweise, als die nach wie vor bestehende Möglichkeit, ein globales Format über FORMAT SUM (z.b. FORMAT SUM = “^.2###,###”;) festzulegen.
Die hier beschriebenen Optionen verfügen ausschließlich bei der Ausgabe im OFFICEEXPORT über eine Funktion, d.h. PS/PDF, INSTANTEXCEL oder HTML usw. sind hiervon nicht betroffen.
01.05.2020 (5.1.3.10): Neues Feature: BINOMIALPERCENTRANGE
Syntax:
BINOMIALPERCENTRANGE= [ YES | NO ];
Voreinstellung: NO
Das Verfahren, ein Konfidenzintervall durch Addition bzw. Subtraktion einer halben Schwankungsbreite zu ermitteln, stößt in der Standarteinstellung an seine Grenzen.
Allerdings gibt es auf der Binomialverteilung beruhende Berechnungsmethoden, die der Tatsache Rechnung tragen, dass der Konfidenzbereich an den Rändern, also nahe 0% oder nahe 100%, asymmetrisch zur Skalenmitte hin verschoben ist. Eine solche Methode ist das “Wilson score interval”, das in GESStabs implementiert ist. In der Nähe von 50% ist das Ergebnis dem Resultat der Standardberechnung sehr ähnlich, zu den Rändern zeigen sich die Unterschiede. Ist diese Methode mit BINOMIALPERCENTRANGE = YES; eingeschaltet gilt sie für alle TABLE-Statements im Anschluss bis sie wieder aud NO gesetzt wird oder bis zum Scriptende. Im Gegensatz zum Standard liefert das binomial berechnete Konfidenzintervall nach Wilson selbst für einen Prozentwert von 0 oder 100 noch interpretierbare Grenzwerte.
Der Benutzer muss selbst entscheiden, ob die Voraussetzungen zur Benutzung gegeben sind. Es muss sich um echte “ja/nein Experimente” handeln, bei Prozentwerten, die auf Mehrfachnennungen und OVERCODE SUM beruhen, ist dies eher nicht der Fall.
03.04.2020 (5.1.3.9): Neues Feature: TRANSFERSUPPRESSEDCONTENTKEY
Syntax:
TRANSFERSUPPRESSEDCONTENTKEY= [ YES | NO ];
Wenn nicht alle Tabellen im OFFICEEXPORT-Inhaltsverzeichnis aufgenommen werden, z.B. nur jede erste Tabelle auf einem Worksheet, wird der Eintrag ins Inhaltsverzeichnis dann nicht ausgegeben, wenn diese Tabelle durch SUPPRESSEMPTYTABLE unterdrückt wird. Steht der Schalter TRANSFERSUPPRESSEDCONTENTKEY auf YES, wird der CONTENTKEY an die folgende Tabelle übertragen. Verfügt die folgende Tabelle bereits über einen CONTENTKEY, wird diese Übertragung abgebrochen. Ansonsten erfolgt die Übertragung solange, bis eine nicht unterdrückte Tabelle gefunden wird. Diese Option wird oft zusammen mit CONTENTKEY NEXT TABLE eingesetzt.
Es handelt sich hierbei um einen globalen Schalter, der für den gesamten Lauf gilt.
27.03.2020 (5.1.3.9): Neue Option im OFFICECONTENTPAGE: bei INCLUDE CHAPTERTITLE-Statement: HYPERLINK
Syntax:
OFFICECONTENTPAGE= ... |INCLUDE CHAPTERTITLE : HYPERLINK ... ... ;
Die neue Option HYPERLINK innerhalb des INCLUDE CHAPTERTITLE Statement ermöglicht den Sprung auf die Zelle A1 des entsprechenden Arbeitsblatts. Die Namen der Arbeitsblätter dürfen dabei keine Sonder- und Leerzeichen enthalten.
Beispiel:
| INCLUDE CHAPTERTITLE : HYPERLINK FONT "Helvetica" SIZE 12 OPTION BOLD ITALIC FOREGROUND $00aaff
11.03.2020 (5.1.3.8): Funktionserweiterung: FOREGROUND für HEADER und FOOTER
Syntax:
FOREGROUND [HEADER | FOOTER] = <color>;
Es besteht jetzt die Möglichkeit, eine FOREGROUND-farbe auch für HEADER und FOOTER im PS/PDF-output zu bestimmen.
Beispiel:
FOREGROUND HEADER = $FF0000;
03.03.2020 (5.1.3.7): Neue Option zum OFFICECONTENTPAGE-Statement: NOAUTOTABLETITLE
Syntax:
OFFICECONTENTPAGE = ... |NOAUTOTABLETITLE : [YES | NO] ... ;
Unter Verwendung des CONTENTKEYs wird jede Tabelle in eine OFFICECONTENPAGE eingetragen. Wurde kein CONTENTKEY definiert, wird in der Grundeinstellung der TABLETITLE verwendet. Die neue Option NOAUTOTABLETITLE dient dem Zweck, wenn nur die explizit mit einem CONTENTKEY versehenen Tabellen in der OFFICECONTENTPAGE erscheinen sollen. Für diesen Fall wird die automatische Verwendung des Tabletitle in der OFFICECONTENTPAGE ausgeschaltet.
13.11.2019 (5.1.3.6): Neue Option zu OFFICECONTENTPAGE: BACKTOCONTENT
Syntax:
OFFICECONTENTPAGE = ... |NOAUTOTABLETITLE : [YES | NO] ... ;
Syntax:
OFFICECONTENTPAGE = | BACKTOCONTENT : <anystring> [ <textqualifier> ] <textqualifier> ::= [ <officefont> | FOREGROUND <color> | BACKGROUND <color> ] <officefont> ::= FONT <fontname> SIZE <number> [ OPTION [ BOLD | ITALIC | UNDERLINE ] ];
Bei dieser Option wird in jedes EXCEL-Tabellenblatt oben links (A1) der angegebene Text ausgegeben, und diese Zelle wird mit einem Hyperlink auf das Inhaltsverzeichnis hinterlegt. Bei einem Klick auf diese Zelle, wird das Inhaltsverzeichnis angesprungen.
Beispiel:
OFFICECONTENTPAGE = ... | BACKTOCONTENT : "Zurück zum Inhalt" FONT Arial SIZE 9 OPTION ITALIC UNDERLINE BOLD FOREGROUND $FF0000 ... ;
Bitte beachten:
Dieser Hyperlink funktioniert nicht, wenn der Name des Tabellenblattes vom Inhaltsverzeichnis Leer- oder Sonderzeichen enthält. Dies gilt ebenso für alle Tabellenreferenzen zu Tabellen, welche auf Tabellenblätter liegen, deren Namen Leer- oder Sonderzeichen enthalten.
08.11.2019 (5.1.3.6): Neue Option zu OFFICECONTENTPAGE: SHOWSHEETNAME
Syntax:
OFFICECONTENTPAGE = | SHOWSHEETNAME : [ YES | NO ]; default: YES (in Übereinstimmung mit dem bisherigen verhalten)
Im bisherigen Standard für
OFFICECONTENTPAGE
wurde in die Liste der Sprungziele immer automatisch der Wechsel auf ein neues EXCEL-Sheet im Inhaltsverzeichnis mit einer eigenen Zeile vermerkt. Dies ist zum Beispiel dann nicht sinnvoll, wenn für jede Tabelle ein eigenes Sheet angelegt werden soll. Daher kann der automatische Wechsel mit dem Schalter ein- und ausgeschaltet werden. Dies ist ein globaler Schalter für das gesamte Inhaltsverzeichnis. Wenn es also ausgeschaltet wird, an anderer Stelle den Wechsel auf ein neues Sheet aber sichtbar werden soll, dann muss man den
SHEETNAME
mit dem
OFFICECONTENTPAGE INSERT
-Statement explizit angeben.
08.11.2019 (5.1.3.6): Neues Statement: OFFICECONTENTPAGE INSERT
Syntax:
OFFICECONTENTPAGE INSERT = { <addtitem> [ OFFICEFONT <officefont> ] }*n ; addtitem ::= [ LINE | CONTENTKEY | VARTEXT <variable> | VARTITLE <variable> | CITEFIRSTVAR [ XVALID | YVALID ] LITERAL <text> | TABLETITLE ]
Es wird hiermit beim OFFICE-EXPORT ermöglicht im Inhaltsverzeichnis weitere frei zu definierende Erläuterungen unterzubringen, die zwischen den Links zu den Tabellen stehen sollen. Welche das im Einzelnen sein können, hängt mit der Struktur des Tabellenbandes ab. Wenn zum Beispiel ein- und derselbe Fragentext für eine Reihe Statements gilt, ist es unter Umständen sinnvoll, diesen Fragentext auch im Inhaltsverzeichnis vor den Links zu den betreffenden Tabellen zu zitieren. So können beliebige Texte definiert werden, welche sich auf eine Reihe von Elementen der Tabelle beziehen:
LINE Leerzeile CONTENTKEY Zeile, die den CONTENTKEY enthält VARTEXT <variable> Zeile, die den Text einer beliebigen Variablen widergibt VARTITLE <variable> Zeile, mit dem VARTITLE einer beliebigen Variablen CITEFIRSTVAR [ XVALID | YVALID ] Fragentext der ersten Variablen in X- bzw. in Y-richtung LITERAL <text> Zeile mit einem beliebigen Text TABLETITLE Zeile mit dem TABLETITLE SHEETNAME Zeile mit dem Namen des SHEET, auf dem die folgende Tabelle erscheint.
Anmerkung:
Allen Elementen kann ein eigener Office-Font zugeordnet werden.
08.11.2019 (5.1.3.6): Neues Statement: MAKESINGLES
Syntax:
MAKESINGLES <newvarlist> [ = <sourcelist> ];
In der einfachsten Version ersetzt dieses Statement das
VARIABLES
-Statement:
MAKESINGLES f1 to f17;
Keine der Variablen aus der Bildungsvorschrift, im Beispiel “ f1 to f17”, darf existieren.
Anstelle des
";"
kann auch mit einem
"="
fortgefahren werden:
MAKESINGLES f1 to f17 = x18 to x34;
Es wird nach dem
"="
eine Variablenliste erwartet, die genauso viele Elemente enthält, wie sich aus der Bildungsvorschrift ergeben. Dann steht
MAKESINGLES
für eine Kombination aus
VARIABLES
und
COMPUTE COPY
.
Bitte beachten: wenn
MAKESINGLES
mit einer Sourcelist verwendet werden, werden intern durch
COMPUTE COPY
nur die numerischen Werte übertragen. Wenn eine Variable in der <sourcelist> die Eigenschaft
ALPHA
hat, ist das ein Syntaxfehler.
01.11.2019 (5.1.3.5): Funktionserweiterung OFFICEEXPORT: Option FLOWTEXT für LABELS X und LABELS Y
Syntax:
OFFICEXPORTOPTIONS EDIT = | FLOWTEXT LABELS X : [ YES | NO ] | FLOWTEXT LABELS Y : [ YES | NO ];
- Problem: Excel kennt kein Verfahren der darstellenden Software Hinweise zu übermitteln an welcher Stelle ein Wort sinnvoll getrennt werden soll. In der Folge kommt es dazu, dass beim Export in EXCEL oft keine sinnvolle Trennung von Wörtern erfolgt.
- Lösungsansatz: Wenn im Script nun die neue Option
FLOWTEXT
für die Boxtypen Labels X bzw. Labels Y eingeschaltet sind wird die Berechnung der Schriftbreite der Texte vorher ausgemessen. Trennungen werden so auch bei von PS/PDF abweichenden Fonts oder effektiven Spaltenbreiten berechnet.
- Anmerkung: Es gibt Situationen, in denen ein Textbestandteil gemessen an der Textbreite in eine Zelle gegebener Breite passt, Excel dies aber bei der Darstellung des Inhalts aber nicht so sieht. Diese Ungenauigkeiten variieren je nach Font, Fontgröße und Optionen wie BOLD oder ITALIC. Trotz eines ziemlich üppig bemessenen Sicherheitsabstandes kann eine verunglückte Darstellung nicht mit Sicherheit vermieden werden. Sollte der jetzt eingestellte Sicherheitsabstand nicht reichen, bittet GESS um Nachricht.
18.10.2019 (5.1.3.5): Neues Statement: OLDGROUPCLEARMETHOD
Syntax:
OLDGROUPCLEARMETHOD = [ YES | NO ];
Beim Clearen von SPSS-Files wird hiermit verhindert, dass die atomaren Variablen innerhalb von VARGROUPS nicht ungewünscht auf den gültigen Wert ‘0’ also Non-MISSING sondern auf MISSING gesetzt werden.
Zur zusätzlichen Sicherheit kann man mit dem Schalter die alte Löschmethode und die zusätzliche Löschung der atomaren Variablen aus dem SPSS-Reader reaktivieren. So werden die Einleseroutinen der einzelnen SPSS-READER vor dem Abfragen der Werte aus SPSS einen speziellen zusätzlichen Schritt einfügen, dass ALLE atomaren Variablen im Zweifel noch einmal auf MISSING gesetzt werden.
07.10.2019 (5.1.3.5): Neues Statement: INTERVALS
Syntax:
INTERVALS <newvar> = <sourcevar> { | <labeltext> : <comparison> <comparevalue> }*n; <comparison> :: [ LT | GT | LE | GE ]
- Mit INTERVALS wird bei der Gruppierung von Werten die Fehleranfälligkeit gegenüber des GROUPS-Statements bei nicht ganzzahligen Werten behoben.
- Daneben ist die Schreibweise weniger redundant und übersichtlicher.
Beispiel:
INTERVALS Interviewdauer = SEKUNDEN_GESAMT | "< 1 Minute" : LT 60 | "1 - 3 Minutes" : LT 180 | "5 - 10 Minutes" : LT 300 | "> 10 Minutes" : GE 600 ;
Anmerkung:
- Demgegenüber würde im folgenden GROUPS-Statement zum Beispiel 59.5s in keine der angeführten Kategorien fallen. Hier müsste man umständlich noch die Nachkommastellen einfügen. Die Fehler bei den Nachkommastellen gehören damit der Vergangenheit an.
GROUPS Interviewdauer = | "< 1 Minute" : [0 :59] in SEKUNDEN_GESAMT | "1 - 3 Minutes" : [60:179] in SEKUNDEN_GESAMT ;
30.09.2019 (5.1.3.5): Syntaxerweiterung für CHAPTER
Syntax:
CHAPTER <varlist> = [ {<string>}*n ];
- Das CHAPTER-Statement akzeptiert nun mehrere Kapitelbezeichnungen, um hierarchische Kapitelzuordnungen zu ermöglichen:
Beispiel:
CHAPTER sg.1.1 sg.10.1 sg.10.open = ["Hauptbefragung","Der Grid-Kram","SGQ"];
wird folgendermaßen in die JSON-Syntaxbeschreibung übertragen:
{ "varname": "mg.20.open", "chapter": [ "Hauptbefragung", "Der Grid-Kram", "MGQ" ], "label": { "1": "fgjhj", "2": "zwanzig", "3": "&&&" } },
28.08.2019 (5.1.3.5): Neue Funktion HTMLCHART
- In HTML ausgegebene Tabellen können nun um beliebig viele, einfache Diagramme (HTML-Charts) ergänzt werden.
Syntax:
HTMLCHART {<Optionen>} = <Zellbereich>;
- Die vollständige Dokumentation befindet sich unter ‘Tutorials und Handbücher’.
05.08.2019 (5.1.3.4): Funktionserweiterung für SUPPRESSEMPTYTABLE
- Bisher war
SUPPRESSEMPTYTABLE
ein globaler Schalter, dessen letzte Einstellung für den gesamten Tabellierlauf galt. - Nun ist
SUPPRESSEMPTYTABLE
eine tabellenspezifische Voreinstellung: sie wird an alle Tabellen weitergegeben, die im Anschluss formuliert werden, bis es eine neueSUPPRESSEMPTYTABLE
-Voreinstellung gibt. - Wird eine Tabelle aufgrund von
SUPPRESSEMPTYTABLE=YES
unterdrückt, wird dies in den Warnungen (gtc.wrn) protokolliert. - Bei
STRUCTURE
oderNO
hinterlässt die unterdrückte Tabelle eine Spur in den Ausgabedateien, dies wird nicht protokolliert. - Es ist möglich, dass eine mit
SUPPRESSEMPTYTABLE=STRUCTURE
unterdrückte Tabelle nicht als Struktur ausgegeben werden kann, z.B. wenn Variablen keine Labels enthalten. Sie wird dann wieSUPPRESSEMPTYTABLE=NO
behandelt.
17.07.2019 (5.1.3.3): Neues Statement: REPRINT TABLE
Syntax:
REPRINT TABLE = <tablename>;
- Eine bereits produzierte Tabelle kann an beliebiger späterer Stelle im Tabellenband wiederholt ausgegeben werden.
- Die Tabelleninhalte bleiben dabei erhalte — mit Ausnahme des
TABLETITLE
und derTABLENUMBER
. - Die Zellinhalte werden nicht neu ausgezählt, sondern es wird auf den bereits gezählten Inhalt der Quelltabelle zurückgegriffen.
- Die Tabelle wird allerdings neu gesetzt, ein absolut identische Aussehen ist also nicht garantiert.
- Die kopierte Tabelle enthält die meisten Informationen aus der Ursprungstabelle, jedoch nicht ausnahmslos:
-
TOPTEXT
undBOTTOMTEXT
bleiben erhalten, und damit auch automatisch eingefügte Filtertexte (siehe dieTEXT
-Optionen zuSETFILTER
,TABLEFILTER
undTABSELECT
). - Die Auswirkungen des Filters bzw. der Filter bleiben ohnehin erhalten, da die Daten der bereits ausgezählten und gedruckten Quelltabelle entnommen werden.
-
12.07.2019 (5.1.3.3): Neues Cellelement: SUMSUMPERCENT
Syntax:
SUMSUMPERCENT ( var, basisvar )
- Kombination der zwei CellElements
SUM
undSUMPERCENT
in einem CellElement
13.06.2019 (5.1.3.3): Funktionserweiterung: GESSCHART
- Neue ChartOption:
TABLE <name>
- Die feste Bindung des
GESSCHART
-Statements an die davor stehende Tabelle ist (zumindest in Teilen) aufgehoben. - Man kann sich mit der zusätzlichen Option
TABLE
auf alle bestehenden Tabellen als Datenquelle beziehen. - Das ermöglicht auch den Bezug auf versteckte Tabellen.
Beispiel:
TABLE NAME tab1 = k BY f1; TABLE NAME tab2 HIDDEN( PS PDF ) = k BY f2; TABLE NAME tab3 = k BY f3; GESSCHART TABLE tab2 CHARTTITLE "chart zu hidden tab2" HORIZONTAL CHARTAREA 15 15 270 180 NEWPAGE = | FORM RECTANGLE COLUMNS 1:5 ROWS 1:2 DIRECTION FALLING | FORM RECTANGLE COLUMNS 1:5 ROWS 4:5 DIRECTION RISING ;
- Bei einer gemischten Ausgabe von Charts und Tabellen erscheint das Chart immer im Anschluss an die direkt davor stehende Tabelle: Das Chart ist an diese Tabelle gebunden (attached).
- Ein Chart hat bei Ausgabe in dieselbe PS/PDF-Datei immer zwei mögliche Bezüge zu Tabelle(n): die im Skript vorangegangene Tabelle (attached), aus der sich seine Position in der Ausgabedatei ableitet, und eine Tabelle, die die Datenquelle darstellt.
- Dies kann dieselbe Tabelle sein, dann ist es nicht notwendig, die Datenquelle mit der
TABLE
-Option im GESSCHART-Statement explizit zu benennen. - Gibt es im
GESSCHART
-Statement keineTABLE
-Komponente, ist die voranstehende Tabelle automatisch die Datenquelle. - Im obigen Beispiel steht das
GESSCHART
-Statement im Anschluss an die Tabelle tab3 (attached) und als Datenquelle ist explizit die Tabelle tab2 angegeben (TABLE tab2).
Anmerkung:
- Charts aus
GESSCHART
-Anweisungen, die direkt hinter einerHIDDEN
-Tabelle stehen, können NICHT ausgegeben werden, weil das Chart Bestandteil der Tabellenausgabe ist undHIDDEN
(PS oder PDF) die Ausgabe der Tabelle unterdrückt. - Da die Ursache dieser Nicht-Ausgabe sonst schwer vollziehbar ist, gilt diese Konstellation als Syntax-fehler 799: “GESSCHART attached to HIDDEN table, chart cannot be printed” und führt zu Programmabbruch.
04.06.2019 (5.1.3.3): Neues TableOption: HIDDEN
Syntax:
TABLE = ... HIDDEN( { <medium> }*n ) ... = A BY B ...; <medium> ::= PS | PDF | HTML | OFFICEEXPORT | INSTANTEXCEL;
- Als neuen Bestandteil der
TABLEOPTIONS
kann nun das “Verstecken” von Tabellen vom TypTABLE
,OVERVIEW
undXOVERVIEW
in definierten Ausgabemedien (PostScript, PDF, HTML usw.) eingestellt werden. - Es gibt Situationen, in denen man sich auf die Inhalte von Tabellen beziehen möchte, die nicht dargestellt werden sollen. Ein Beispiel hierfür ist die Vererbung einer Sortierreihenfolge, die einer Tabelle entnommen werden soll, die es zu diesem Zeitpunkt (noch) nicht gibt. Wenn etwa die Reihenfolge einer Reihe von zehn Tabellen nicht aus der ersten, sondern der zweiten Tabelle entnommen werden soll.
- Diese Anforderung kann man dadurch erfüllen, dass man die zweite Tabelle zweimal erzeugt: einmal
HIDDEN
vor der ersten, und dann sichtbar nach dieser:
TABLE NAME sortsource HIDDEN( PS PDF HTML OFFICEEXPORT INSTANTEXCEL ) = #k BY val2 SORT ABSOLUTE; TABLE SORT AS sortsource = #k by val1 ; TABLE SORT AS sortsource = #k by val2 ; TABLE SORT AS sortsource = #k by val3 ;
Anmerkung:
- Zwischen den Ausgabemedien herrscht eine Hierarchie. Es muss immer ein “
PRINTFILE PS
” oder “PRINTFILE PDF
” geben. - Alle Inhalte einer Tabelle werden für das
PRINTFILE
zusammengestellt. Alle anderen Ausgabeformen (wie HTML, OFFICEEXPORT, POWERCHART usw.) sind Abnehmer der internen Daten für dasPRINTFILE
. - Wird eine Tabelle für das
PRINTFILE
unsichtbar gemacht, werden die internen Daten genauso produziert wie im Standarfall. - Es wird allerdings die Ausgabe in PS/PDF unterdrückt. Diese Unterdrückung greift tief in die interne Verarbeitung der internen Klassen für die Generierung von PS/PDF ein. Auch versteckte ( PS/ PDF ) Tabellen existieren so intern mit allen Inhalten, diese sind also für alle abgeleiteten Ausgabeformen greifbar, also auch für POWERCHART.
Aktuelle Beschränkung:
- Zwar liegen die Inhalte auch für GESStabs Artist vor. Diese Charts sind aber strukturell Bestandteil der Tabellenausgabe und fallen deshalb gegenwärtig noch den Mechanismen zur Unterdrückung in PS bzw. PDF zum Opfer.
31.05.2019 (5.1.3.3): Neues Feature: TRUNCATEDECIMALS
Syntax:
TRUNCATEDECIMALS <varlist> = <number>; <number> = -9 .. 9;
- GESStabs zählt ja einfach alles, auch die Häufigkeiten beliebiger
FLOAT
-Werte. Das ist oft praktisch, kann aber auch lästig sein. - Bei Häufigkeitszählungen über kontinuierliche Variablen kommt es vor, dass mehrfach derselbe gerundete Wert mit ggf. unterschiedlichen Häufigkeiten dargestellt wird, wobei die genau ausgezählten Werte infolge der Rundung bei der Ausgabe gar nicht mehr ersichtlich sind.
- Die interne Zählung ist dann differenzierter als die Ergebnisausgabe: Bspw. würden bei einer Darstellung mit einer Nachkommastelle die Werte 0,0238, 0,0278, 0,0385, 0,0417, 0,0426, 0,0435 und 0,0455 alle auf 0,0 gerundet, in der Tabelle stünde dann siebenmal der Wert 0,0 mit der Häufigkeit 1.
- Um diese Diskrepanz zwischen der internen Genauigkeit und der gerundeten Darstellung zu beseitigen, kann anstelle von
SETDECIMALS
das neue SchlüsselwortTRUNCATEDECIMALS
verwendet werden. - In der Folge wird während des Zählens die zu zählende Variable auf den passenden Ausgabewert gerundet.
- Im oben angeführten Beispiel stünde dann der Zahlenwert 0,0 mit der absoluten Häufigkeit 7.
- Stellt man mit einer solchen Variablen weitere Berechnungen an, ist es natürlich nicht wünschenswert, dass der ungenauere gerundete Wert in diese eingeht — im obenstehenden Beispiel ist 0,0417 eben nicht gleich 0,0 wie in der Tabellenausgabe.
- TRUNCATEDECIMALS verändert die Variableninhalte nicht dauerhaft, sondern nur im Zählvorgang in
CODEBOOK
undTABLE
. In angeforderte Statistiken wieMEAN
oderVARIANCE
geht der ungerundete Wert ein.
Beispiel: Negative
<number>
-Werte verschieben das Dezimalkomma nach links.
- Rundung auf 100er:
TRUNCATEDECIMALS <varlist> = -2;
Anmerkung:
- Es wird empfohlen,
SETDECIMALS
undTRUNCATEDECIMALS
nicht gemeinsam auf eine variable anzuwenden. - Ein Teil der statistischen Kennzahlen wie
MEDIAN
oder Perzentile geht auch auf Häufigkeitsauszählungen zurück. Diese sind zwar intern und nicht störend für den Tabellenleser, bei sehr großen Fallzahlen und hoher interner Differenzierung der Daten kann dies in der Performance spürbar werden. An diesen Stellen greiftTRUNCATEDECIMALS
aber nicht ein.
31.05.2019/ 07.06.2019 (5.1.3.3): Neues Schlüsselwort: ALPHACASESENSITIVE
Syntax:
ALPHACASESENSITIVE = [ YES | NO | UPPERCASE | LOWERCASE ];
- Default: NO
- Im Standardfall werden die Inhalte von Alpha-Variablen ‘case-insensitiv’ verglichen.
- Daraus folgt, dass z.B. ‘Ja’, ‘ja’ und ‘JA’ als inhaltsgleich betrachtet und behandelt werden.
- Die Schreibweise inhaltsgleicher Strings richtet GESStabs nach der Schreibweise der zuerst aufgetretenen Zeichenfolge.
- Mit
UPPERCASE
bzw.LOWERCASE
kann die Darstellung zusammengefasster Strings vereinheitlicht werden: in Klein- oder Großschreibung. -
ALPHACASESENSITIVE = YES;
bewirkt, dass nur identische Strings als inhaltsgleich interpretiert: ‘Ja’, ‘ja’ und ‘JA’ sind dann unterschiedliche Inhalte. - Dies beeinflusst das Verhalten des Einlesens von
DATAFILE
,CSVINFILE
undSPSSINFILE
ebenso wie die Ergebnisse von bspw.COMPUTE CONCAT
. - Die Einstellung gilt für alle Alpha-Variablen des gesamten Laufs.
29.04.2019 (5.1.3.1): Neues Tabelformat: NOXVARTITLEBOX
Syntax:
TABLEFORMAT = +/- NOXVARTITLEBOX;
- Unterdrückt die Ausgabe des Variablennamens/ Vartitels für den Tabellenkopf.
- Analog zu
NOVARTITLEBOX
(Y‑achse der Tabelle)
26.04.2019: Neues Feature: ALPHAFAMILY
Syntax:
ALPHAFAMILY <neueAlphaFamily> = { <alphavar> }*n;
- Mit
ALPHAFAMILY
kann aus atomaren Variablen vom TypALPHA
eine Varfamily vom TypALPHA
erzeugt werden. - Damit lassen sich offene Fragen, für die in der Befragung mehrere Eingabefelder vorgesehen sind (1. Nennung, 2. Nennung, u.s.w.), leicht zusammengefasst in einer Tabelle auswerten.
- Wenn die zu bildende Variable bereits existiert, ist dies ein Syntaxfehler; ebenso, wenn eine der atomaren Variablen nicht vom Typ
ALPHA
ist. -
EVALFAMVALONCE
ist als Default aufYES
gesetzt, d.h. wenn ein String in mehr als einer Variablen vorkommt, aus denen die ALPHAFAMILY erzeugt wird, wird er nur einmal ausgewertet, mitNO
kann man dieses Verhalten ändern. - Die
ALPHAFAMILY
verhält sich in Bezug zuEVALFAMVALONCE
wie jede andereMULTIQ
. - Mit der
ALPHAFAMILY
kann man wie mit einerVARFAMILY
Tabellen erzeugen. -
COMPUTE SUBSTR
undCOMPUTE CONCAT
sind nicht anwendbar, auch Textvergleiche (IN
,EQ
,GE
etc. beiALPHAVAR
) sind nicht zulässig. - Möchte man testen, ob eine bestimmte Zeichenfolge in einer der
ALPHAVARS
vorkommt, so muss man entweder die atomaren Elemente testen (AND
/OR
-verknüpft) oder mitCOMPUTE CONCAT
eine aus denALPHAVARS
zusammensetzteALPHAVAR
erzeugen und testen, ob der Begriff in dieser vorkommt.
Zum Schluss noch eine Warnung:
- Die atomaren
ALPHAVARS
dürfen nur in je einerALPHAFAMILY
enthalten sein. - Die folgenden Anweisungen erzeugen Unsinn, da ’nenn1’ und ’nenn2’ in zwei verschiedenen
ALPHAFAMILY
s auftauchen:
ALPHAFAMILY alleNennungen = nenn1 nenn2 nenn3 nenn4; ALPHAFAMILY Nennung1und2 = nenn1 nenn2;
26.04.2019: Neues Feature: COMPUTE SUBSTR
Syntax:
COMPUTE SUBSTR [ <lettercase> ] <Zielvariable> = <Quellvariable> <start> <len>; <lettercase> ::= [ LOWERCASE | UPPERCASE ]
- Mit
COMPUTE SUBSTR
wird ein Substring der Länge <len>, ab der Position <start> kopiert. - Das Ergebnis kann kürzer sein als <len> und ggf. die Länge null haben.
- Ein leerer String einer Alpha-Variable ist
MISSING
. - <Quellvariable> muss eine atomare Variable sein. Ob es sich um Alpha-Variable handelt, ist unerheblich: Für alle Variablen wird der Text des Labels verwendet, der dem aktuellen Wert entspricht.
- Gibt es zum gegenwärtigen Wert einer existierenden Variablen kein Label (kann bei Alpha-Variablen nicht der Fall sein), wird ein leerer String (also MISSING) zurück gegeben.
- Man kann außerdem bestimmen, dass das Ergebnis in Groß- (
UPPERCASE
) oder Kleinbuchstaben (LOWERCASE
) gewandelt werden soll, um z.B. Fateinamen (für unix definiert) in Kleinbuchstaben zu verwenden. - Wird keine der beiden Optionen verlangt, wird der Text unverändert (d.h. wie in den Ausgangsvariablen) verwendet.
- Wenn die <Zielvariable> existiert, muss sie vom Typ
ALPHA
sein. Existiert sie nicht, wird eine neue Alpha-Variable generiert.
Beispiel:
COMPUTE SUBSTR part = neuevar 1 20;
-
SUBSTR
kann auch alsCOMPUTE
-Spezifikation inIF
-Statements und derenELSE
-Komponente verwendet werden.
Beispiel:
IF [ 2 3 ] IN x7 THEN SUBSTR part = neue 1 20 ELSE SUBSTR part = neue 1 10;
26.04.2019: Neues Feature: COMPUTE CONCAT
Syntax:
COMPUTE CONCAT [ <lettercase> ] <alphavar> = { <elem> }*n; <lettercase> ::= [ LOWERCASE | UPPERCASE ] <elem> ::= { "<beliebiger text>" | VARIABLE }
- Mit
COMPUTE CONCAT
können die Labels beliebig vieler atomarer Variable mit Textkonstanten zusammengefügt, d.h. verkettet, werden. - Die Variablen als Argumente müssen atomare Variablen sein.
- Ob es sich um Alpha-Variablen handelt, ist dabei unerheblich. Für alle Variablen wird der Text des Labels verwendet, der dem aktuellen Wert entspricht.
Beispiel:
COMPUTE CONCAT neuevar = "aktuelles Label von Variable Q1 " q1 " und aktuelles Label von Variable Q2 " q2;
- Wenn eine Variable nicht existiert, wird der eingesetzt Name als Textkonstante verwendet.
- Gibt es zum gegenwärtigen Wert einer existierenden Variablen kein Label (kann bei aplha-Variablen nicht der Fall sein), wird ein leerer String verwendet.
- Man kann außerdem bestimmen, dass das Ergebnis in Groß- (
UPPERCASE
) oder Kleinbuchstaben (LOWERCASE
) gewandelt werden soll, um z.b. Dateinamen (für unix definiert) in Kleinbuchstaben zu verwenden. - In solchen Fällen wird man das Statement oft in “degenerierter” Form verwenden, z.B.:
COMPUTE CONCAT LOWERCASE unixfilename = anyalpha;
-
CONCAT
kann auch alsCOMPUTE
-Spezifikation inIF
-Statements und derenELSE
-Komponente verwendet werden.
Beispiel:
IF [ 2 3 ] IN x7 THEN CONCAT neue = 'aa' '-' 'bb' '-' xx1 '-' x5 ELSE CONCAT neue = 'xx' '-' 'yy' '-' xx1 '-' x5;
- Übersichtlicher ist oft die Verwendung von
IFBLOCK
/ELSEBLOCK
/ENDBLOCK
anstelle vonIF
/ELSE
:
IFBLOCK [ 2 3 ] IN x7 THEN COMPUTE CONCAT neue = 'aa' '-' 'bb' '-' xx1 '-' x5; COMPUTE SUBSTR PART = neue 1 20; ELSEBLOCK COMPUTE CONCAT neue = 'xx' '-' 'yy' '-' xx1 '-' x5; COMPUTE SUBSTR part = neue 1 10; ENDBLOCK;
26.04.2019: Neuer Vergleichsoperator ‘IN’ für Alpha-Vergleiche
Syntax:
IF <alpha> IN <alphavar> THEN .... <alpha> ::= Textkonstante oder Alpha-Variable <alphavar> ::= Alpha-Variable
- In der einfachen Variante wird getestet, ob ein beliebiger Text in einem Alpha-Wert vorkommt.
- V1 sei eine Variable vom Typ Alpha, dann kann man mit ‘IN’ testen, ob eine Textkonstante (z.b. ‘abc’) in dieser Variable enthalten ist:
IF "abc" IN V1 THEN...
- Man kann auch prüfen, ob der Text einer Alpha-Variablen im Text einer anderen Variable enthalten ist: V1 und V2 seien beides variablen vom Typ Alpha, dann kann man mit darauf testen, ob der Alpha-Inhalt von V2 Bestandteil von V1 ist:
IF V2 IN V1 THEN...
- Es gibt auch einen “Wildcard”-Vergleich: Enthält die Textkonstante auf der linken Seite des Vergleichs ein ‘*’ oder ein ‘?’, dann wird ein Pattern-Vergleich durchgeführt.
- Jedes ‘?’ steht für einen beliebigen Buchstaben, ‘*’ für mehrere.
IF "a?c.txt" IN V1 THEN...
- Das letzte Beispiel würde entsprechend ‘true’ liefern für: a1c.txt, a2c.txt, abc.txt usw.
- Diese Form des Vergleichs gibt es nur bei Textkonstanten; wenn auf der linken Seite des Vergleichsoperators eine numerische Variable steht, dann wird KEIN Pattern-Vergleich durchgeführt — auch nicht, wenn deren Text ein ‘*’ oder ‘?’ enthält.
23.04.2019: Neues Schlüsselwort: IGNORECASEINCOMPARE
Syntax:
IGNORECASEINCOMPARE = [ YES | NO ];
- Alle Textvergleiche (EQ,
NE
,LE
,GE
,LT
,GT
undIN
) unter Bbeteiligung von Stringkonstanten und/oder Alpha-Variablen werden im Standardfall case-sensitive durchgeführt, d.h. “abc” ist unterschiedlich zu “ABC” oder “Abc” usw. - Setzt man den Schalter
IGNORECASEINCOMPARE
aufYES
, werden die Vergleiche durchgeführt, ohne dass zwischen Klein- und Großbuchstaben unterschieden wird. Hierfür werden alle Labeltexte vor dem Vergleich in Kleinbuchstaben gewandelt. - Grundsätzlich sollten auch Zeichen außerhalb des ASCII-Codessets, wie z.b. ä und Ä oder é und É richtig zugeordnet werden.
- Da dies aber vom lokalen Setting des Betriebssystems abhängt, wird zur Vorsicht bei der Verwendung geraten. Deutsche Umlaute sind wohl OK, aber bei
bspw. griechischen, hebräischen oder osteuropäischen Sonderzeichen ist Kontrolle angebracht.
01.04.2019: Neues Feature von CLONEVAR: Löschen von Labels mittels DELETELABELS
Syntax:
CLONEVAR = [ DELETELABELS [ MISSING | AUTONOANSWER | OVERCODE | {}*n ] ];
- Mehrere Variablen, die denselben Sachverhalt abbilden, werden bei der Tabellierung oft mit leichten Modifikationen benötigt.
- Ein häufiges Beispiel hierfür ist die Verwendung im Header und in der Vorspalte von Tabellen:
MISSING-values
,AUTONOANSWER
oderOVERCODE
sollen zwar i.d.r. bei der Anzeige in der Vorspalte erscheinen, nicht aber im Tabellenkopf. - Der Klon soll sich also manchmal doch vom Original unterscheiden.
- Mit der Option
DELETELABELS
kann man einzelne Labels gezielt über ihren Code löschen oder anhand ihrer EigenschaftenMISSING
,AUTONOANSWER
undOVERCODE
.
Beispiel:
CLONEVAR f3_header = f3 DELETELABELS MISSING AUTONOANSWER OVERCODE; FORHEADER f3_header = YES; FORCOUNTS f3 = YES;
-
DELETELABELS
ist wörtlich zu nehmen: es werden nur die Labels gelöscht, die Werte der Variablen werden nicht modifiziert. - Damit die bearbeiteten Variablen nicht ohne Labels wieder erscheinen, ist es ratsam, die Einstellung
GLOBALPRINTALL
aufNO
zu setzen.
18.03.2019: Funktionserweiterung für SUPPRESSEMPTYTABLE: STRUCTURE
Syntax:
SUPPRESSEMPTYTABLE = [ NO | YES | STRUCTURE ];
-
SUPPRESSEMPTYTABLE
ist ein globaler Schalter, der für den gesamten Lauf gilt. - In für Endkunden bestimmten Läufen wird er gewöhnlich auf
YES
gesetzt; leere Tabellen werden dann nicht ausgewiesen. -
NO
führt zur Ausgabe einer Tabellenseite ohne Inhalt mit einem konfigurierbaren Text, der mitteilt, dass keine gültigen Fälle vorhanden sind. - Die neue Option
STRUCTURE
gibt die Struktur von Tabellen vom TypTABLE
aus, d.h. alle Zellen werden mit Besetzung n=0 ausgegeben. - Entsprechende Informationen liegen für Tabellen vom Typ
CODEBOOK
nicht vor. -
STRUCTURE
wird so interpretiert, dass leere Tabellen in der Ausgabe kenntlich gemacht werden sollen, es erscheint an dieser Stelle dann derEMPTYTABLETEXT
. - Unabhängig von der Stellung von
SUPPRESSEMPTYTABLE
wird jede leere Tabelle in den Messages (gtc.msg) protokolliert.
13.03.2019: Neues Feature: CLONEVAR
Syntax:
CLONEVAR <destinationvar> = <sourcevar>;
- Erzeugt einen Klon zur <sourcevar>, der denselben Variablentyp und auch dieselbe Anzahl möglicher Nennungen hat.
- Dieser Klon erbt
TEXT
,VARTITLE
, dieMISSING values
,MISSING
…RANG
E und ggf. die EigenschaftenAUTONOANSWER
,EVALFAMVALONCE
undGROUPCOUNTS
; auch variablenbezogene Angaben zu Dezimalstellen (DECIMALS
,SETDECIMALS
) werden übertragen. - Die Labels werden kopiert, das umfasst auch die
OVERCODES
und LabelPoperties, wie z.B.USEFONT
,LEVEL
,SORTCLASS
,NEWPAGE
undRECODE
, analog zuLABELS COPY
. - Außerdem wird intern eine
COMPUTE COPY
-Anweisung (COMPUTE COPY <destinationvar> = <sourcevar>;
) generiert, die während des Einlesens alle Werte jeden Falls überträgt.
Voraussetzungen:
- Es darf noch keine Variable mit dem Namen der <destinationvar> existieren.
- <sourcevar> muss existieren und muss eine atomare Variable (
SingleQ
) oder eine Mehrfachnennungsvariable (MultiQ
,DichoQ
) sein. - Variablen vom Typ
Alpha
,OpenQ
,AssocVar
wie auch andere spezielle Variablen (z.B.IndexVar
) können nicht geklont werden, der Versuch führt zu einem Syntaxfehler. - Nicht übertragen werden:
-
EXCLUDEVALUES
undRESTRICTVALUES
- Varkeys (z.b.
SingleQ Key
…) - Filter (
SETFILTER
/ENDFILTER
,FILTER
)
-
14.02.2019: Neues Statement: MULTIFROMSTRING
- Umwandeln von Alpha-Variablen in
FAMILYVARS
Syntax:
MULTIFROMSTRING [ DELIMITED <delimiter> ] [ DECIMALS <decimalchar> ] <newvar> = <alfavar>;
- Defaults:
DELIMITED: ','
undDECIMALS: '.'
- Zunehmend sind Variablen mit Mehrfachnennungen oder offene Fragen in Datensätzen als Strings abgelegt.
- Um diese in GESStabs effizient zu verarbeiten, gibt es jetzt das neue Statement
MULTIFROMSTRING.
- <newvar> und <alfavar> müssen existierende Variablen sein, <newvar> muss eine
FAMILYVAR
sein. <alfavar> kann auch eine numerische Variable sein. - Entscheidend ist nur, dass es für den gegenwärtigen Code ein Label gibt, das sich numerisch interpretieren lässt.
- Es werden soviele Codes in <newvar> abgelegt, wie in dem Labelstring erkannt werden. (Trivialerweise natürlich nur soviele Werte, wie die
FAMILYVAR
aufnehmen kann.) - Existiert das Label zum gegenwärtigen Code nicht, oder enthält es keine als Zahlen interpretierbare Substrings, ist die resultierende Variable
MISSING
. - Wenn z.b. eine Alpha-variable f3_alpha in einem SPSS-Datensatz den String “3,6,18” enthält, ist eigentlich eine Mehrfachnennungsvariable mit den Werten 3, 16 und 18 “gemeint”.
Beispiel:
MAKEFAMILY f3 = 10; MULTIFROMSTRING f3 = f3_alpha;
Mit der Sequenz kann man das Label “3,6,18” in eine GESStabs-konforme
MultiQ
umwandeln. (Die Werte von Alpha-Variablen werden intern in
VALUELABELS
gespeichert.)
- Anmerkung: Ein Datumsstring in der Form “TT-MM-JJJJ” kann auf diese Weise in eine
MultiQ
mit drei Werten gewandelt werden.
Beispiel:
MAKEFAMILY datum1 = 3; EVALFAMVALONCE datum1 = no; MULTIFROMSTRING DELIMITED "-" datum1 = datestring; Die Verwendung vonEVALFAMVALONCE
an dieser Stelle ist notwendig, da sonst z.b. "01-01-01" in eineMultiQ
mit nur einer Nennung "1" ausgepackt würde.
17.12.2018: Neues Schlüsselwort: OVEROVERCODE
- Neues Schlüsselwort in
Valuelabels
- Bestimmung: Ein
OVEROVERCODE
ist einOVERCODE
, der nur ausOVERCODE
s und ggf.OVEROVERCODE
s zusammengesetzt ist - Voraussetzung für die Nutzung: Alle
OVERCODE
s undOVEROVERCODE
s innerhalb derVALUELABELS
haben eindeutigen Namen. - Syntax: Zuweisung von Namen zu
OVERCODE
s durch Ausschreiben des Namens direkt hinter das SchlüsselwortOVERCODE
(bzw.OVEROVERCODE
) - Mehrfach verwendete Namen werden erkannt und führen zu einem Syntaxfehler.
- Die leitende Idee bei der Verwendung von
OVEROVERCODE
ist, Codes in einer Labelliste nur einmal als Referenz in einemOVERCODE
zu verwenden.
Beispiel:
LABELS SORTTESTX = 1 eins 2 zwei OVERCODE OC1 1:2 "erster OC" 3 drei 4 vier 5 fünf OVERCODE OC2 3:5 "zweiter OC" 6 sechs 7 sieben OVERCODE OC3 6 7 "dritter OC" 8 acht 9 neun 10 zehn OVERCODE OC4 8 9 10 "vierter OC" OVEROVERCODE OOC1 :OC3 :OC2 "erster OOC" OVEROVERCODE OOC2 :OC4 :OC1 "zweiter OOC" OVEROVERCODE OOOC1 :OOC1 :OOC2 "erster OOOC" ;
- Die Namen ‘OC1’, ‘OC2’… und ‘OOC1’ bzw. ‘OOOC1’ wurden hier nur der Einfachheit halber gewählt, selbstverständlich können hierfür auch inhaltlich definierte Namen verwendet werden.
- Zusätzliche Regeln zur Reihenfolge:
OVEROVERCODE
s können nur ausOVERCODE
s gebildet werden, die bereits existieren, also die weiter oben im Skript erzeugt wurden und einen eindeutigen Namen tragen. - Weniger strenge Regeln für die Platzierung der atomaren Codes: Codes können (wie bisher) auch dann
OVERCODE
s zugeordnet werden, wenn sie noch nicht definiert sind.
Beispiel einer syntaktisch korrekten Labelliste:
labels sorttestxx = overcode OC1 1:2 "erster OC" overcode OC2 3:5 "zweiter OC" overcode OC3 6 7 "dritter OC" overcode OC4 8 9 10 "vierter OC" overovercode OOC1 :OC3 :OC2 "erster OOC" overovercode OOC2 :OC4 :OC1 "zweiter OOC" overovercode OOOC1 :OOC1 :OOC2 "erster OOOC" 1 eins 2 zwei 3 drei 4 vier 5 fünf 6 sechs 7 sieben 8 acht 9 neun 10 zehn ;
04.09.2018: Neues Datensatzformat: Invertierte Datensätze
- Als neues proprietäres Dateiformat kann GESStabs nun invertierte Datensätze schreiben und lesen.
- Vorteil: wesentlich kürzere Verarbeitungszeiten bei Datensätzen mit hoher Fall- und geringer Variablenzahl
- Daten werden variablenweise in Blöcken angeordnet.
- Invertierte Datensätze enthalten ausschließlich numerische Werte. Variablenbeschreibungen müssen via
SYNTAX
herausgeschrieben und in einer Textdatei übergeben werden. Alpha-Variablen werden systematisch umgeformt.
Syntax:
- Herausschreiben eines invertierten Datensatzes:
INVERTOUT = "<filename/-path>";
- Einlesen eines invertierten Datensatzes:
INVERTIN = "<filename/-path>";
- Ein Tutorial mit allen Optionen steht unter ‘Tutorials und Handbücher’ zum Download bereit.
06.08.2018: Neues Statement: CONFIDENCERANGEPVALUE
Syntax:
CONFIDENCERANGEPVALUE = [ SIGNIF68 | SIGNIF90 | SIGNIF95 | SIGNIF99 | SIGNIF999 ];
- Im Standardfall (ohne explizite Setzung von
CONFIDENCERANGEPVALUE
) wird das Konfidenzintervall näherungsweise für einen p‑Wert von 0.05 berechnet. - Dieser p‑Wert kann jetzt mit dem
CONFIDENCERANGEPVALUE
-Statement neu gesetzt werden. - Nach Setzung eines expliziten p‑Wertes wird das Intervall exakt berechnet.
15.06.2018: Neues statement: EMPTYTABLETEXT
Syntax:
EMPTYTABLETEXT = [ "text" | NO ];
- Im Normalfall werden leere Tabellen (in die keine Fälle geflossen sind) unterdrückt.
- Bei Setzung von
SUPPRESSEMPTYTABLE = NO;
wird eine Tabellenseite ausgegeben, die den Standardtext “Empty table” und Angaben über die Syntax der Tabelle enthält (welche Variablen in die X- bzw. y‑Achse der Tabelle eingingen). - Mit der neuen Option
EMPTYTABLETEXT
kann stattdessen ein spezifischer Text ausgeben werden. -
EMPTYTABLETEXT
setzt eine Voreinstellung, die für alle folgenden Tabellen gilt. - Selbstverständliche kann vor jeder Tabelle ein neuer Text definiert werden.
- Soll der ursprüngliche Zustand (ohne spezifische Einstellung für leere Tabellen) wieder hergestellt werden, erreicht man dies mit
EMPTYTABLETEXT = NO;
.
22.05.2018: TRANSLATE: Neue Option für OFFICEXPORTOPTIONS
-
-
- in Zusammenhang mit
USEPOSTSCRIPTFONT
- in Zusammenhang mit
-
Syntax:
OFFICEXPORTOPTIONS = .... | TRANSLATE <postcriptfontname> : <excelfontname> [ OPTION { BOLD | ITALIC | UNDERLINE } ] ....
- In vielen Fällen ist es hinreichend, dass GESStabs den Namen des PostScript-Fonts in das erzeugte Excel- bzw. LibreOffice-Dokument einträgt — insbesondere, wenn diese Fonts im System installiert sind.
- Über das optische Resultat entscheidet aber das Windows-System auf dem Rechner des Betrachters, welcher Font als angemessene Ersetzung gilt.
- Das unerfeuliche Resultat kann sein, dass der Erzeuger des Dokuments sinnvolle Font-Ersetzungen sieht, das Ergebnis beim Kunden aber anders aussieht.
- Mit der
TRANSLATE
-Option zuOFFICEXPORTOPTIONS
kann man genau festsetzen, welche Systemfonts die PostScript-Fonts ersetzen sollen.
Beispiel:
OFFICEXPORTOPTIONS EDIT = | TRANSLATE "Helvetica" : "Arial" | TRANSLATE "Helvetica-Bold" : "Arial" OPTION BOLD | TRANSLATE "Helvetica-BoldOblique" : "Arial" OPTION ITALIC BOLD | TRANSLATE "Helvetica-Oblique" : "Arial" OPTION ITALIC ;
- Hierbei ist zu beachten, dass verschiedene Schnitte eines Fonts (wie BOLD oder ITALIC) im PostScript-Font-Modell einen weiteren fFont darstellen, während die Schnitte in den Font-Modellen der meisten graphischen Benutzeroberflächen als Eigenschaften (
OPTION
) des Fonts angegeben werden. - Um die Schrift ‘Arial’ in den Schnitten ’standard’, ‘bold’, ‘italic’ oder ‘bolditalic’ zu verwenden, müssen für vier verschiedene PostScript-Fontnamen eine Übersetzng definiert werden.
- Spezialfall: Ein Abobe-Font soll während eines Tabellier-Jobs in mehrere unterschiedlich Systemfonts überetzt werden. Verwendet man
OFFICEXPORTOPTIONS EDIT
, so gilt die letzte Setzung einer Fontübersetzung auch für davor angeforderte Tabellen. D.h. beiEDIT
gewinnt immer die letzte Änderung. Ist es notwendig, unterschiedliche Fontübersetzungen in einem Lauf zu verwenden, müssen dieOFFICEXPORTOPTIONS
(ohne Verwendung vonEDIT
) insgesamt neu gesetzt werden.
24.04.2018: SORTCODEOVERCODE: neues TABLEFORMAT zur sortierung
Syntax:
TABLEFORMAT = +/- SORTCODEOVERCODE;
- Eine alternative Methode zur Sortierung von Labellisten mit
OVERCODE
- Sortiert werden alle Labels, einfache Labels und Overcode-Labels, anhand des Kriteriums.
- Codes, die zu einem Overcode gehören, werden im Anschluss an diesen Overcode ausgegeben.
- Diese Option ist auf Sortierungen nach
ABSOLUTE
undMEAN
beschränkt. - Zu
MEAN
gehören auch alle Zellelemente, bei denen zusätzlich zumMEAN
Signifikanzen ausgegeben werden, wie z.b.MEANTEST
,HYMEANTEST
etc. -
SORTCODEOVERCODE
undAUTOOVERCODE
schließen sich aus. Eine Tabelle, die diese beiden Tabellenformate enthält, ist ein syntaktischer Fehler.
03.04.2018: Neues Statement: INVALIDRESULTS
Syntax:
INVALIDRESULT <cellelement> = <string>;
Existiert für
Cellelement
kein Ergebnis (z.b. keine Signifikanz des Unterschieds zu einer anderen Spalte oder 0 Werte für einen Mittelwert), kann für diesen Fall ein Ausgabestring definiert werden.
15.03.2018: Neue Optionen für OFFICEXPORTOPTIONS
1.
CONTENTPAGE
Syntax:
.... | CONTENTPAGE : <name of worksheet> ....
- Wenn diese Option gesetzt ist, wird als erstes Worksheet eine Seite mit Inhaltsangaben eingefügt.
- Dies setzt voraus, dass die Tabellen in mindestens einem explizit benannten Worksheet stehen.
- Mindestens eine
CHAPTERTITLE
-Anweisung muss also im Skript vorder ersten Tabellen-Anforderung stehen. - Ist ein
CONTENTKEY
der Tabelle bekannt, wird dieser verwendet. - Ist das nicht der Fall, wird der
TABLETITLE
verwendet. - Ist auch dieser nicht bekannt, wird der Text “unkown content” ausgegeben.
- Ein Wort zur Warnung: Damit man die Hyperlink-Funktion des Inhaltverzeichnisses nutzen kann, sollte man in den Beschriftungen der Worksheets (
CHAPTERTITLE
) keine Sonderzeichen wie Umlaute etc. verwenden. Diese werden zwar als Laschentexte korrekt dargestellt, die Hypertext-Funktion scheitert daran aber (“Bezug ungültig”).
2.
INHERITFONT
Syntax:
.... | INHERITFONT <boxtype> : [ YES | NO ] ....
- Auf besonderen Wunsch eines Nutzers
- Das Schlüsselwort
INHERITFONT
hat in diesem Kontext die Bedeutung: Verwende den (vererbten) Font vom PS/PDF-Printfile. - Die verschiedenen syntaktischen Möglichkeiten der Font-Bestimmung werden in folgender Priorität abgearbeitet:
- Wenn
ELEMENTFONT
explizit gesetzt ist, gilt dieser. - Sonst wenn
BOXFONT
explizit gesetzt ist, gilt dieser. - Sonst, wenn
INHERITFONT
aufYES
gesetzt ist, wird der Fontname aus PS/PDF verwendet. - Ist dies alles nicht der Fall, wird an Excel/Libre Office kein Font übergeben und es gilt der Office-Standardfont.
- Wenn
12.03.2018: Neue Option: OFFICECHARTDEFAULTS
- Voreinstellungen für
OFFICECHART
- Hinweis: Die Syntax von
OFFICECHARTDEFAULTS
undOFFICECHART
ist jetzt an die Schreibweise vonOFFICEEXPORTOPTIONS
angepasst.
Syntax:
OFFICECHARTDEFAULTS = [ | AUTO : [ YES | NO ] ] [ | CHARTTITLE : <title> ] [ | INVERSE : [ YES | NO ] ] [ | USE3D : [ YES | NO ] ] [ | SIZE : <width> <height> ] [ | FORM : [ BARS | COLUMNS | LINES | PIE ] [ | OPTION : [ CLUSTERED | STACKED | PERCENTSTACKED ] [ | LEGENDPOSITION : [ TOP BOTTOM LEFT RIGHT ] ] [ | BACKGROUND : <colorvalue> ] [ | FRAMECOLOR : <colorvalue> ] [ | COLUMNS <number> : <number> ] [ | ROWS <number> : <number> ] [ | LABELS : [ 0 | 1 | 2 ] ] ;
- Geleitet von der Vermutung, dass
OFFICECHART
häufig benutzt wird, ähnliche Charts für (fast) alle Tabellen in einemOFFICEEXPORT
zu erstellen, gibt es die syntaktische Möglichkeit, für die Parameter vonOFFICECHART
Defaults zu definieren. - Sollen alle Tabellen verchartet werden, dann genügt ein
OFFICECHARTDEFAULTS
-Statement mit| AUTO : YES
. - Bei mehrfachem Aufruf von
OFFICECHARTDEFAULTS
gilt immer die letzte Version; es gibt keine Variante, einzelne Parameter zu modifizieren. -
OFFICECHARTDEFAULTS = ;
löscht alle Voreinstellungen. - Ist
AUTO
gesetzt, wird an jede Tabelle, die in der Folge definiert wird, automatisch ein Chart angehängt, dessen Parameter denOFFICECHARTDEFAULTS
entnommen werden. - Hier ein Beispiel, in dem 10 Excelsheets mit einer Tabelle und einem Pie-Diagramm erzeugt werden:
OfficechartDefaults = | auto : yes | ChartTitle : "Total" | inverse : no | legendposition : right | form : pie | background : $EEFFFF | size : 500 400 | use3d : yes | columns 1:1 ; dummyhead = ttl labels 1 "Total"; #macro #tab( &1 ) chaptertitle = y&1; tabletitle = "Variable y&1"; table = ttl axx by y&1; #endmacro #domacro ( tab 1:10 )
- Natürlich können an die Tabellen mit Auto-generierten Charts weitere Charts angehängt werden.
12.03.2018: Neues Feature: OFFICECHART
- Diagramm-Darstellung von Tabellen in
OFFICEEXPORT
Syntax:
OFFICECHART = [ | CHARTTITLE : <title> ] [ | INVERSE : [ YES | NO ] ] [ | USE3D : [ YES | NO ] ] [ | SIZE : <width> <height> ] [ | FORM : [ BARS | COLUMNS | LINES | PIE ] [ | OPTION : [ CLUSTERED | STACKED | PERCENTSTACKED ] [ | LEGENDPOSITION : [ TOP BOTTOM LEFT RIGHT ] ] [ | BACKGROUND : <colorvalue> ] [ | FRAMECOLOR : <colorvalue> ] [ | COLUMNS <number> : <number> ] [ | ROWS <number> : <number> ] [ | LABELS : [ 0 | 1 | 2 ] ] ;
- Die Syntax ist identisch mit der des
OFFICECHARTDEFAULTS
-Statements. - Die Option
AUTO
ist hier logischerweise bedeutungslos, gilt aber nicht als syntaktischer Fehler. - Hinter jedem Tabellen-Statement vom Typ
TABLE
dürfen beliebig vieleOFFICECHART
-Anweisungen folgen. - Für jede
OFFICECHART
-Anweisungen wird unter der Tabelle ein Standard-Excel (bzw. Libre-Office)-Diagramm erzeugt, sofernOFFICEEXPORT
aktiviert ist. - Die Optionen ergeben sich aus der oben dargestellten Syntax.
Es gibt systembedingt eine Reihe von Einschränkungen:
1. Die Tabelle darf nur EIN
CELLELEMENT
je Datenzelle enthalten.
2. Im Default werden alle Zeilen und Spalten der Tabelle dargestellt.
- Man kann sowohl für die Spalten (
COLUMNS
) als auch für die Zeilen (ROWS
) Bereichseinschränkungen formulieren:- Zeilen und Spalten müssen in der Reihenfolge ihrer Position in der Tabelle bezeichnet werden.
- Es können nur zusammenhängende Bereiche angesteuert werden, also z.b.
COLUMNS1:3
für die Einschränkung auf die erste bis dritte Spalte der Tabelle.
3. Eine Ansteuerung über die Codes der Variablen ist nicht möglich.
4. Auch können Tabellenrahmen (
ABSCOL
,
TOTALROW
etc.) nicht angesteuert werden.
5. Von zu langen Labeltexten ist abzuraten.
6. Tabellen müssen darüber hinaus so erzeugt werden, dass die Labels der Y‑Achse nur einen einzeiligen Text enthalten, d.h. alle Labeltexte und die Daten hierzu müssen in direkt aufeianderfolgenden Zeilen der Excel-Tabelle stehen.
7. Es besteht die Einschränkung, dass Charts nur in .xlsx- oder .ods-Dateien exportiert werden.
Zur Syntax:
- Die Parameter dürften selbsterklärend sein.
- Zu
INVERSE
:- Wenn man keine Angabe macht, (intern
INVERSE = NO
), dann werden die Labels der Y‑Achse der Tabelle zur Achsenbeschriftung. - Sollen die Labels der X‑Achse (Kopf) der Tabelle zur Achsenbeschriftung herangezogen, muss
INVERSE
angegeben werden.
- Wenn man keine Angabe macht, (intern
- Zu
PIE
:- In einem
PIE
kann immer nur eine Zeile oder eine Spalte dargestellt werden. - Die Ansteuerung ist analog zu den anderen Charttypen.
- Will man eine Spalte darstellen, muss man eine einzelne Spalte benennen, z.b.
COLUMNS 1:1
bzw.2:2
, und das Diagramm ist normal, also nichtINVERSE
. - Will man eine Datenzeile darstellen, muss eine einzelne Zeile benannt werden, z.b.
ROWS 3:3
, und das Diagramm muss alsINVERSE
gekennzeichnet werden.
- In einem
- Zu
LABELS
:- Die einzelnen Elemente eines Office-Charts können mit Beschriftungen versehen werden.
- Diese werden mit dem
LABELS
-Parameter, einem integer zwischen 0 und 2, angefordert.
0 : Zeige Tabellenwert
1 : Zeige Tabellenwert als Prozent
2 : Zeige Namen
22.02.2018: Neuigkeiten zu OFFICEEXPORTOPTIONS
1. Dokumentationsergänzung
- Neben der Option
ELEMENTFONT
gibt es auchELEMENTCOLOR
. - Hiermit kann man eine Vordergrundfarbe für einzelne
CELLELEMENTS
vereinbaren.
2. Bugfix
- Betrifft
USEPRINTERCOLORS DATACELL
. - Hier wurden nur die Vordergrundfarben (Schriftfarben) übertragen, die Hintergrundfarben wurden ggf. nicht
übertragen. - Gefixt!
3. Hinweis zu .xlsx und
VARTITLE X
- Bei der Anwendung der Option
CONNECTEXCELCELLS
, z.B. aufVARTITLE X
, wird ggf. der Excel-Output im xlsx-Format so herausgeschrieben, dass Excel beim Einlesen unkorrekte Inhalte moniert. - Anschließend ist die Tabelle für das naive Auge völlig ok.
- WORKARAOUND:
1. Man kann .xls verwenden (hier allerdings keine Charts).
2. Wenn man Charts produzieren will und die Excel-Fehlermeldung beim Einlesen auftrit, kann man die .xlsx-Datei mit Excel einlesen und anschließend wieder speichern. Danach sind die Probleme verschwunden.
08.02.2018: Bugfix
- Betrifft
CALCULATECOLUMN
undCOLUMNSUMMARY
- Diese wurden in einigen ausgelieferten Versionen nicht berechnet, die Zellen blieben leer.
- Gefixt!
02.01.2018: Neue Option: POSTPONE für die JSON-Option im INVERTOUT-Statement
- Im Standardfall werden die JSON-Variablen-Beschreibungen in dem Moment geschrieben, in dem das Statement gelesen und verarbeitet wird. Dies ist also ein Spiegel der Zustands der betroffenenen Variablen in zu diesem Zeitpunkt.
- Wenn
ALPHA
-Variablen gelesen werden, und die Zuordnung von Codes zu Labeltexten gespeichert werden soll, muss das Schreiben der JSON-Definition aufgeschoben werden, bis das Lesen der Daten beendet ist. - Dies bewirkt die Option
POSTPONE
. - Vgl. auch unten:
SYNTAX
.
Syntax:
INVERTOUT [ JSON [ POSTPONE ] <jsonpath> ] = <invertpath>;
02.01.2018: Verschiedene Variablen-Typen in INVERTIN/INVERTOUT
- Betrifft:
MULTIQ
,DICHOQ
,ALPHA
,OPEN
undOPENASALPHA
- Invertierte Dateien speichern intern nur numerische atomare Variablen.
- Das bedeutet, dass man für andere Variablen Anpassungen machen muss, damit sie dieser Anforderung entsprechen und ihre Inhalte mit
INVERTOUT
geschrieben bzw. nach dem Einlesen mitINVERTIN
verwendet werden können.
1. Variablen vom Typ
MULTIQ
:
- Bei ihrer internen Verarbeitung erscheinen sie als Liste von atomaren numerischen Variaben, die die erste, zweite … Nennung enthalten.
- Diese tauchen nach dem Einlesen der invertierten Datei wieder auf, lediglich die Zusammenfassung in die
VARFAMILY
muss manuell wieder hergestellt werden.
2. Variablen vom Typ
DICHOQ
:
- Hier gilt sinngemäß dasselbe wie oben.
3. Variablen vom Typ
ALPHA
:
- Sie sind schon mal vom Typ her atomare Variablen.
- Außerdem haben sie immer auch einen numerischen Wert, der sich beim Einlesen ihrer Alpha-Texte ergibt.
- Jeder Alpha-Text, der sich von allen vorherigen unterscheidet, wird der Variablen als Label angefügt, und hierbei wird immer ein neuer Code erzeugt.
- Diesen Wert enthält die Variable als “current value”.
- Sie wird deshalb auch numerisch in das
INVERTOUT
-File geschrieben. - Damit sind allerdings die ursprünglichen Alpha-Texte noch nicht wieder hergestellt.
- Zwei dinge müssen noch geschehen: 1. Die Code/Text-Zuordnungen müssen an das einlesende Skript übergeben werden. 2. Bei der Erzeugung müssen alle Labels in Form eines Syntax-File gepeichert werden.
- Nun ist das übliche Praxis, weil ja auch die Labeltexte aller anderen Variablen in dieser Form übergeben werden:
SYNTAX VARLABELS VARTITLE VALUELABELS = <path>;
-
Dieses Statemen muss jetzt um die
POSTPONE
-Option erweitert werden (s.u.):
SYNTAX POSTPONE VARLABELS VARTITLE VALUELABELS = <path>;
- Auf der einlesenden Seite muss diese Syntax-Definition einbezogen werden, danach kann man mit dieser Variablen alles treiben wie gehabt.
- Es gibt aber einen klitzekleinen Unterschied: Es ist jetzt eine numerische Variable mit
LABELS
und nicht mehrALPHA
.
4. Variablen vom Typ
OPENASALPHA
:
- Sie sind weder numerisch noch atomar.
- Ihr Inhalt kann aber mit einem
COMPUTE ALPHA
in eine Variable vom TypALPHA
übertragen werden:
COMPUTE ALPHA o1_a = o1_alpha;
- Danach geht es weiter wie oben beschrieben.
5. Variablen vom Typ
OPEN
:
- Variablen vom Typ
OPEN
enthalten numerische Wertemengen. Ihnen können beliebig viele Codes zugeordnet werden. - Sie passen formal nicht ins Schema einer invertierten Datei.
- Man muss ihre Werte in eine Mehrfachnennungs-Variable übertragen, deren atomare Bestandteile automatisch ins invertierte File übertragen werden, z.B.:
MAKEFAMILY o1_n = 5; COMPUTE LOAD o1_n = o1;
- Auf der einlesenden Seite müssen diese mit einem
VARFAMILY
-Statement wieder zu einer Mehrfachnennungs-Variable zusammengefasst werden:
VARFAMILY o1_n = "o1_n $1" TO "o1_n $5";
02.01.2018: Zusätzliche Option: POSTPONE
- Zusätzliche Option
POSTPONE
für dasSYNTAX
-Statement im Zusammenhang mitINVERTOUT
- Im Standardfall werden
SYNTAX
-Files in dem Moment geschrieben, in dem das Statement gelesen und verarbeitet wird. Dies ist also ein Spiegel des Zustands der betroffenenen Variablen zu diesem Zeitpunkt. - Für den Spezialfall, dass
ALPHA
-Variablen gelesen werden, und die Zuordnung von Codes zu Labeltexten gespeichert werden soll, muss allerdings das Schreiben der Syntax-Definition aufgeschoben werden, bis das Lesen der Daten beendet ist. Dies bewirkt die OptionPOSTPONE
. - Das ist dann relevant, wenn man in invertierten Dateien auch die Inhalte von
ALPHA
-Variablen speichert. - Invertierte Dateien sind von ihrer Struktur auf Effizienz designed, und sie enthalten nur numerische Daten.
- Die den Labels zugeordneten Codes werden automatisch gespeichert.
- Um solche Variablen nach dem Lesen aus invertierten Dateien auszuwerten, bedarf es der zughörigen Label-Informationen. Diese wird im
SYNTAX
-File mit ausgegeben, wenn die OptionPOSTPONE
gesetzt ist.
27.12.2017: Codes und Verbatims parallel aus einem OPENQFILE lesen
Syntax:
SINGLEQ <offen_alpha> = OPENASALPHA DATA <offen>;
<offen> ::= Name der OPEN-Variablen wie im OPENQFILE
<offen_alpha> ::= Name der zusätzlich zu erzeugenden Variable mit dem Alpha-Text
- Damit man Codes und Text im Skript parallel ansprechen kann, müssen aus einer
OPEN
-Variablen imOPENQFILE
zwei Variablen mit unterschiedlichen Namen im Skript werden. - Dies wird dadurch gelöst, indem man zu jeder Standard-
OPEN
-Variablen (numerische Codes) jeweils eine zusätzlicheOPEN
-Variable erzeugt, die nicht direkt aus demOPENQFILE
gelesen wird, sondern die Textinformation aus der Datenzeile der Ursprungsvariablen ableitet. - Damit dies geschehen kann, muss die zusätzliche Variable einen Verweis kennen, aus der Datenzeile welcher Variablen der Text entnommen werden soll.
- Das Variablen-Statement der Standard-Variablen sieht aus wie immer, z.b.:
SINGLEQ offen1 = OPEN;
- Die zusätzliche Variable, die den Alpha-Text enthalten soll, wird ebenso mit dem
SINGLEQ
-Statement erzeugt. - Statt des Schlüsselwortes
OPEN
steht hierOPENASALPHA
, gefolgt vom Datenverweis nach dem SchlüsselwortDATA
und dem Variablennamen, wie er imOPENQFILE
steht. Z.B.: SINGLEQ offen1_alpha = OPENASALPHA DATA offen1;
Beispiel für eine Anwendung in einem Makro:
#macro #openplusalpha( &name ) SINGLEQ &name = OPEN; SINGLEQ &name_alpha = OPENASALPHA DATA &name; #endmacro #domacro( openplusalpha offen1 offen2 offen3 offen4 offen5 offen6 )
- In diesem Beispiel wird davon ausgegangen, dass im
OPENQFILE
die Codes und Verbatims der Variablen offen1, offen2, offen3, offen4, offen5 und offen6 vorhanden sind. - Im Makro werden zusätzlich die Variablen offen1_alpha bis offen6_alpha erzeugt, die die verbatims enthalten.
- SPSS-sav-Files: Wenn man sowohl die Texte als auch die numerischen Codes einer Studie ins sav-File schreiben will, werden die zusätzlich mit
OPENASALPHA DATA
erzeugten Variablen automatisch übernommen. Dies ist das standardverfahren fürOPENASALPHA
-Variablen. - Die Variable, die die Codes enthält, werden nicht automatisch übertragen, da es sich bei deren Inhalten um Wertemengen handelt, für die es in SPSS-Files keine Entsprechung gibt.
27.12.2017: Syntaxerweiterung: FILEKEY für CSVINFILE
Syntax:
CSVINFILE [ FILEKEY <key> ] [ <delimchar> ] = <filepath>;
- Auch CSVINFILEs können mit einem FILEKEY versehen werden.
- Der Mechanismus funktioniert analog zur Bindung selektierter OPENQFILEs an DATAFILEs.
Beispiel:
CSVINFILE FILEKEY before2016 = "..\DATA2014\data.csv"; CSVINFILE FILEKEY before2016 = "..\DATA2015\data.csv"; CSVINFILE FILEKEY 2016 = "..\DATA2016\data.csv"; CSVINFILE FILEKEY 2017 = "..\DATA2017\data.csv"; KEY OPENQFILE = panelno; OPENQFILE FILEKEY before2016 = "..\OPEN2014\opn.*"; OPENQFILE FILEKEY before2016 = "..\OPEN2015\opn.*"; OPENQFILE FILEKEY 2016 = "..\OPEN2016\opn.*"; OPENQFILE FILEKEY 2017 = "..\OPEN2017\opn.*";
27.12.2017: Syntaxerweiterungen: ALLOWEMPTY und FILEKEY für DATAFILE und OPENQFILE
Syntax:
DATAFILE [ FILEKEY <key> ] [ ALLOWEMPTY ] = <filepath>;
und
OPENQFILE [ FILEKEY <key> ] [ ALLOWEMPTY ] = <filepath>;
1. Zu
FILEKEY
:
- Im Defaultfall werden alle
OPENQFILE
s allenDATAFILE
s zugeordnet. Das entspricht in der Regel auch den Anforderungen. - Die Zuordnung von Zeilen der
OPENQFILE
s zu den Fällen in denDATAFILE
s geschieht allein über den Inhalt des Schlüssels, der numerisch oder alphanumerisch sein kann. - In Spezialfällen (z.b. Wellenbefragungen in Panels) soll neben dem Fallschlüssel (z.b. Identifikation im Panel) auch zwischen den Befragungswellen unterschieden werden.
- Mit der Option
FILEKEY
kann man nunDATAFILE
s undOPENQFILE
s eigenen Gruppen zuordnen. - Wenn bei einem
DATAFILE
einFILEKEY
gesetzt ist, werden aus der Gesamtmenge aller über Schlüssel verwalteten offenen Antworten nur die herausgesucht, die ausOPENQFILE
s stammen, die denselbenFILEKEY
haben.
Beispiel:
DATAFILE FILEKEY 2016 = "..\DATA2016\data.*"; DATAFILE FILEKEY 2017 = "..\DATA2017\data.*"; OPENQFILE FILEKEY 2016 = "..\OPEN2016\opn.*"; OPENQFILE FILEKEY 2017 = "..\OPEN2017\opn.*";
- Hiermit ist sichergestellt, dass den Daten aus dem Verzeichnis ‘DATA2016’ nur offene Antworten zugeordnet werden, die im Verzeichnis ‘OPEN2016’ vorgefunden wurden.
- Wie man sieht, kann ein
FILEKEY
beliebig vielenOPENQFILE
s bzw.DATAFILE
s zugeordnet werden, denn mit z.b. “data.*” kann eine beliebig große Menge Dateien bezeichnet sein.
2. Zu
ALLOWEMPTY
:
- Im Defaultfall überwacht GESStabs, dass aus jedem
DATAFILE
- bzw.OPENQFILE
-Statement wenigstens eine gültige Datei resultiert. - Ist dies nicht der Fall, wird der Lauf mit einem Syntaxfehler abgebrochen.
- Die Option
ALLOWEMPTY
erlaubt leere Ergebnismengen der Wildcard-Suche.
24.12.2017: Syntaxerweiterung von SORT AS in OVERVIEW-Tabellen
- Neue Variablen-Option:
CODE <reference-code>
- Neue TABLE-Option:
SORT AS
- Gemeinsam ergeben diese neuen Optionen die Möglichkeit, Sortier-Reihenfolgen von Standardtabellen an Mittelwertübersichten zu vererben.
Syntax des gesamten Statements:
OVERVIEW <tableoptions> = <kopf> BY <cellelementlist>( <varlist> ) [ SORT <cellelement> [ DESCEND ] [ PANE <number> CODE <number> ] ] ; <varlist> ::= <var> | <varlist> <var> <var> ::= <varname> <varoption>
- In den
TABLEOOPTIONS
(vor dem ‘=’) wird jetzt auchSORT AS
ausgewertet. -
SORT AS
kann sich auch auf Tabellen vom TypTABLE
beziehen, die z.B. mitSORT ABSOLUTE DESCEND
sortiert sind. - Wenn dann eine Übersichtstabelle mit mehreren
MEAN
etc. in einer korrespondierenden Reihenfolge sortiert werden soll, können einzelne Variablen den Ausprägungen in der Ursprungstabelle zugeordnet werden.
Syntax:
<varoption> ::= [ SORTCLASS <number> ] [ LEVEL <number> ] [ FILTER <log.bedingung> | ] [ USEFONT <font> ] [ USEWEIGHT <variable> ] [ DESCRIPTION <string> ] [ CODE <reference-code> ]
Beispiel:
- Den Ausprägungen 1 bis 5 einer Variablen namens a17 mögen die Variablen a15 bis a19 entsprechen:
1 .. a15
2 .. a16
3 .. a17
4 .. a18
5 .. a19 - Die
OVERVIEW
-Tabelle kann dann korrespondierend zu den Häufigkeiten der Ausprägungen 1 .. 5 sortiert werden, indem man den Variablen die Codewerte entsprechend zuordnet.
TABLE NAME sortbase = x4 BY a17 SORT ABSOLUTE DESCEND; OVERVIEW SORT AS sortbase = x4 BY MEAN( a15 CODE 1 a16 CODE 2 a17 CODE 3 a18 CODE 4 a19 CODE 5 );
- Die Code-Zuordnungen müssen eindeutig sein: wenn mehr als eine Variable in einem
OVERVIEW
-Statement denselben Code bekommen, führt dies zu einem Syntaxfehler. - Wenn man Variablen auf diese Weise Referenzcodes zuteilt, sollte man dies vollständig für alle darzustellenden Variablen machen, da ansonsten vom System Referenzcode vergeben werden, die zu entsprechenden Fehlern führen können.
23.12.2017: Syntaxerweiterung zu INVERTOUT
Syntax:
INVERTOUT [ JSON <jsonpath> ] = <filepath>;
- Wenn in der JSON-Klausel ein gültiger Filepath steht, wird in diese Datei eine Beschreibung des Inhalts der
INVERTOUT
-Datei abgelegt. - Diese Beschreibung enthält alle Variablen, deren Vartitle, deren Text und deren Labels.
23.12.2017: Neues Statement: MINROWTOTAL[GLOBAL]/ MINCOLUMNTOTAL[GLOBAL]
- Neue Statements zum Unterdücken von Spalten/ Zeilen, bei denen im Total eine Untergrenze bei speziellen
Cellelements
unterschritten wird.
Syntax:
a) als nachgestellte Option zu einem
TABLE
-Statement:
MINROWTOTAL <cellelement> = <value>; MINCOLUMNTOTAL <cellelement> = <value>;
b) als globale Voreinstellung:
MINROWTOTALGLOBAL <cellelement> = <value>; MINCOLUMNTOTALGLOBAL <cellelement> = <value>; <cellelement> ::= [ COLUMNPERCENT | ROWPERCENT | MEAN | ABSOLUTE | PHYSICALRECORDS ]
c) zum Ausschalten der globalen Voreinstellung:
MINROWTOTALGLOBAL = NO; MINCOLUMNTOTALGLOBAL = NO;
21.12.2017: Erweiterung des DUMMYHEAD-Statements
-
DUMMYHEAD
dient dazu, einen Kopf fürTable Structure
/Table add
zu definieren. -
DUMMYHEAD
definiert die Labeltexte — was aber vermisst wurde, ist die Funktionalität, dieOVERCODE
in Labels haben. - Das
DUMMYHEAD
-Statement darf jetzt eine Labels-Klausel enthalten, und diese darf Overcodes enthalten.
Syntax:
DUMMYHEAD = <varname> LABELS OVERCODE 1 2 "Labeltext.... 1 "Labeltext" 2 "Labeltext" ... ;
- Das
DUMMYHEAD
‑Statement erzeugt dann nicht nur die explizit genannte Variable, sondern für jedes Label, das NICHT Overcode ist, eine zusätzliche Variable mit dem konstanten Wert des Labelcodes. Deren Name ist <varname>__<labelcode>. - Auch die
Table add
-Statements müssen angepassen: Anstelle der konstanten Zahlenwerte müssen die zusätzlich generierten Konstanten-Variablen verwendet werden, also z.b. “k_dummy__1” statt numerisch 1, usw..
Beispiel:
dummyhead = k_dummy labels overcode sum 1 2 "Alter 1 + 2" 1 "Alter 1" 2 "Alter 2" 3 "Alter 3" ; compute alter = random( 65 ) + 18; TABLE STRUCTURE = k_dummy BY x3; tablefilter 1 = text "" [17:45] in alter; table add = k_dummy__1 by x3 #s; tablefilter 1 = text "" [46:60] in alter; table add = k_dummy__2 by x3 #s; tablefilter 1 = text "" [61:99] in alter; table add = k_dummy__3 by x3 #s;
- In einem so definierten
DUMMYHEAD
, bei dem die Labels innerhalb der erweiterten Syntax definiert werden, werden auch die Overcodes aus denDUMMYHEAD
-Labels gezählt — da alle Subvariablen die Labels derDUMMYHEAD
-Variablen erben, und damit auch die Overcode-Definitionen.
15.12.2017: Textergänzungen mit PREPEND/ APPEND
- Mit
PREPEND
undAPPEND
könnenVartitle
oderVartexte
modifiziert werden, indem man Textbestandteile angehängt oder vorangestellt werden. - In den Statements, die sich auf
Vartexte
beziehen, gilt die Syntax für Texte (Zeilenumbrüche etc. dürfen enthalten sein).
Syntax:
PREPEND VARTEXT <varlist> = <text>; APPEND VARTEXT <varlist> = <text>; PREPEND VARTITLE <varlist> = <string>; APPEND VARTITLE <varlist> = <string>;
13.12.2017: Bugfix
- Betrifft
MarkMeanRow
/MarkMeanColumn
- Interne Kennzeichungen über die Signifikanz von Mittelwertunterschieden wurden via GESS ChartFactory in PowerPoint-Charts übertragen.
- Gefixt!
6.12.2017: CSVINFILE
- Die Anzahl der Semikola in den Datenzeilen wird nicht mehr überwacht.
- Leere Felder nach dem letzten Semikolon erzeugen in der/ den betroffenen Variablen ein MISSING.
5.12.2017: Problemhinweis für ASSOCFILE spaltenfixiert
- Wenn eine Datei, die als
ASSOCFILE
eingelesen werden soll, UTF8-BOM-kodiert ist, wird der Schlüssel in der ersten Datenzeile imASSOCFILE
nicht korrekt gelesen, da die 3‑Bytes des BOM als Inhalt interpretiert werden. - Es ist weiterhin grundsätzlich bei spaltenfixierten Datensätzen darauf zu achten, dass diese nicht in UTF8 oder UTF8BOM kodiert sind.
- Sind zeichen außerhalb von ASCII (0..127) enthalten, werden die spalten falsch interpretiert. Solche Fehler sind u.u. sehr schwer zu finden.
5.12.2017: Bugfix
- Betrifft
MIN MAX
-
MIN MAX
alsCELLELEMENTS
lieferten keine Werte. - Gefixt!
5.12.2017: Bugfix
- Betrifft
IF .. PRINT
in Datei - Sonderzeichen in der Pfadangabe wurde nicht korrekt an Windows übergeben (Windows mag kein UFT8).
- Gefixt!
5.12.2017: Bugfix
- Betrifft
EXPANDINTOKEN
- Es kam vor, dass
EXPANDINTOKEN
-Anweisungen, die durch einIFDEF
eigentlich ausgeschaltet sein sollten, vom Preprozessor doch angewendet wurde. - Gefixt!
5.12.2017: Neues Statement: AUTOCLEAR
Syntax:
AUTOCLEAR = [ YES | NO ];
- Voreinstellung: NO
- Als Default werden explizit alle Variablen innerhalb eine GESStabs-Laufs vor dem Einlesen des nächsten Falles gecleart, d.h. explizit auf Missing gesetzt.
- Wenn man absehen kann, dass dies unnötig ist, kann man diese Option auf NO setzen.
- Bei einer Million Fällen aus einer invertierten Datei ist der Zeitgewinn relevant.
5.12.2017: Neues Statement: ATOMVARSHORTCUT
Syntax:
ATOMVARSHORTCUT = [ YES | NO ];
- Voreinstellung: NO
- Hiermit kann man für atomare Variablen eine beschleunigte Vearbeitung bei der Bereitstellung von Werten für eine Tabelle oder Computes einstellen.
- Man sollte dies nur tun, wenn man Variablen verwendet, die Overcodes enthalten.
23.11.2017: USEWEIGHT
- Wenn der Inhalt einer Variablen mittels
USEWEIGHT
zum gültigen Gewicht für eine oder mehrere Tabellen verwendet wird (USEWEIGHT = <varname>;Z), und diese Variable den aktuellen
SETMISSING
-Wert enthält, dann wird für diesen Fall das Gewicht 0 verwendet. - Die Logik dahinter: ein Fall, dessen Gewicht nicht bestimmt ist, kann in einer gewichteten Auswertung nicht verwendet werden.
23.11.2017: Schreiben und Lesen invertierter Datenfiles
- Neue Statements:
INVERTIN
,INVERTOUT
,ZIPINVERTOUT
,INVERTOUTMAX
- Als neues (proprietäres) Dateiformat kann GESStabs invertierte Datenfiles schreiben und lesen.
- In “normalen” Datenfiles (
DATAFILE
,CSVINFILE
,SPSSIN
) sind die Werte fallweise angeordnet; die Dateien enthalten sequentiell Fälle und alle deren Werte. - Bei invertierter Speicherung ist das umgekehrt: alle werte der einzelnen Variablen sind zusammenhängend gespeichert.
- Diese Speicherform erlaubt sehr effizientes Lesen, wenn nur wenige Variablen benötigt werden.
- Der idealtypische Anwendungsfall ist, wenn aus sehr großen Dateien einzelne Tabellen mit wenigen Variablen erzeugt werden sollen.
- Mit
INVERTOUT
kann eine solche Datei gespeichert werden, ähnlich wie mitSPSSOUTFILE
. - Ein invertiertes File ist nur ein Datenfile; weder Valuelabels noch Vartitle oder Texte sind darin enthalten. In dieser Hinsicht ist es mit einem
CSVINFILE
vergleichbar, mit einem Unterschied: der Zustand der MISSING-Values (das globaleSETMISSING
und variablenbezogeneMISSING
) werden übertragen. -
INVERTIN
ist das komplementäre Statement, diese Datei wieder zu lesen. - Im Anschluss an das
INVERTIN
-Statement sind die Variablennamen im GESS-Skript bekannt. - Die Daten in den invertierten Files können komprimiert gespeichert werden (ZIP). Dies wird mit
ZIPINVERTOUT (YES/NO)
gesteuert. - Das
INVERTIN
-Statement erkennt, ob es sich um komprimierte Daten handelt oder nicht. - Die Werte in den invertierten Dateien sind in Blöcken von x Fällen gespeichert. Diese Speichergröße beträgt im Standardfall 16384. Man kann dies mit
INVERTOUTMAX
anpassen.
23.11.2017: Semikolon und Anführungszeichen in Datenfeldern in CSVINFILE
- Strings in Datenfeldern, die durch ” oder ’ eingeschlossen sind, dürfen das Feldtrennzeichen ; enthalten.
- Außerdem dürfen “” oder ” verwendet werden, die dann als einzelner Char interpretiert werden.
- Das letzte Feld in einer Datenzeile muss nicht durch ein Semikolon abgeschlossen werden.
21.22.2017: Bugfix
- Betrifft
AUTOOVERSORT
-Problem - Wenn
SORTCLASS
an Overcodes und außerdemSORTCLASS
an Labels, die keinem Overcode angehören, mitAUTOSORTCLASS
(das Resultat der Auflösung der internen Hierarchie von Labels und Overcodes imAUTOOVERSORT
) zusammen kamen, wurde der Vorrang vonSORTCLASS
vorAUTOSORTCLASS
falsch aufgelöst. - Gefixt!
21.11.2017: Bugfix
- Betrifft Ausgabe in SPSS-Statement
- Nach einer internen Aufräumaktion wurden die Variablennamen in exportierten SPSS-Valuelabels-Statements nicht an SPSS-Standards “gemangelt”.
- Gefixt!
23.10.2017: Bugfix
- Betrifft
COLUMNSUMMARY
- Einzelne Zellen der Totalspalten wurden bei der Ausführung von
COLUMNSUMMARY
fehlerhaft gelöscht. - Gefixt!
28.09.2017: Neues Feature: OFFICEEXPORT
-
OFFICEEXPORT
ist eine neue Methode, GESStabs-Tabellen nach Excel (.xls, .xslx) oder in Libre Office-Spreadsheets (.ods) zu exportieren. - Der Funktionsumfang ist ähnlich wie bei
INSTANTEXCEL
, der Export erfolgt ohne Beteiligung von Excel/ Libre Office durch GESStabs. Der Vorteil ist eine wesentlich höhere Verarbeitungsgeschwindigkeit. - Da die Gestaltung nicht über HTML/ CSS erfolgt, gehören damit auch die Begrenzungen der Kompatibilität beim HTML-Import durch Excel der Vergangenheit an, insbesondere die teilweise mängelbehaftete Interpretation von CSS durch Excel.
- Generell gilt: ebenso wie bei
INSTANTEXCEL
führt eineNEWCHAPTER
-Anweisung vor einer Tabellenanweisung dazu, dass ein neues Worksheet in Excel/ Libre Office angelegt wird. - Ebenso wie bei
INSTANTEXCEL
führt eineNEWPAGE
-Anweisung vor einer Tabellenanweisung dazu, dass ein Seitenvorschub
im Worksheet angelegt wird. Dieser wird dann beim Ausdruck von Excel bzw. Libre Office ausgewertet. - Der Export wird durch das
OFFICEEXPORT
-Statement angefordert.
Syntax:
OFFICEEXPORT = <filename> ;
-
<filename>
muss eine der folgenden Extensions haben : xlsx | xls | ods. Über die Extension wird automatisch das interne Format der Export bestimmt. - Zur Steuerung des Layouts gibt es das neue statement
OFFICEXPORTOPTIONS
.
Syntax:
OFFICEXPORTOPTIONS [ EDIT ] = { <option> } *n;
- Wenn die Option
EDIT
gesetzt ist, werden nur die explizit angegebenen Optionen geändert, alle anderen Optionen behalten ihre Werte, analog zu +/- beiTABLEFORMATS
.
<option> ::= [ <boxfont> | <elementfont> | <background> | <foreground> | <verticalalign> | <horizontalalign>| <useprintercolors> | <frames> | <wraptext> | <connectexcelcells> | <labelwidth> ]
- Als Optionen stehen folgende Elemente zur Verfügung:
- Schrifttyp und ‑format eines definierten Boxtyps (
BOXFONT
) - Schrifttyp und ‑format eines einzelnen Zellenelements (
ELEMENTFONT
) - Hintergrund- und Schriftfarben einer Tabellenbox (
BACKGROUND FOREGROUND
) - vertikale/ horizontale Ausrichtung von Texten (
VERTICALALIGN HORINZONTALALIGN
) - Übergabe der Farbgebung aus der PDF-/ PS-Ausgabedatei in Excel (
USEPRINTCOLORS
) - Formatierungen von Rahmen (
FRAMES
) - Zusammenfassung einzelner Zeilen in Datenzellen (
CONNECTEXCELCELLS
) - Einstellungen für Fließtexte (
WRAPTEXT
) - Zellenbreiten (
LABELWIDTH
)
- Schrifttyp und ‑format eines definierten Boxtyps (
Beispiel:
officeexport = direct.xlsx; #expand #gray $333333 officexportoptions = | drawbox tabletitle : weight medium borders bottom color #gray | drawbox labels x : weight thin color #gray | drawbox labels y : weight thin color #gray | boxfont tabletitle : "dejavu sans" size 14 option bold | elementfont colchiqu : "Constantia" size 10 option bold | VerticalAlign tabletitle : vcenter | HorizontalAlign datacell : hcenter | UsePrinterColors datacell : yes | labelwidth : 350 | background labels y : $ccffdd | foreground labels y : $FFEEEE ;
- Tutorial zu
OFFICEEXPORT
: siehe hier.
16.08.2017: Neue Statements: SIGNIFMINEFFECTCHIQ und SIGNIFMINEFFECTTTEST
Syntax:
SIGNIFMINEFFECTCHIQ = <value>;
bzw.
SIGNIFMINEFFECTTTEST = <value>;
- Neues Feature: Begrenzung der Ausgabe von Sigifikanzkennzeichnung durch minimale Effektgröße
- Hintergrund: Über Tabellenbände wird gern das Füllhorn statistischer Tests (Signifikanztests) ausgeschüttet. Bei höheren Fallzahlen werden oft allerdings auch Zusammenhänge signifikant, deren geringe Effektstärke eine weitergehende Interpretation oft unsinning erscheinen lässt. Die Signifikanz ist ja nur die Aussage darüber, wie unwahrscheinlich es ist, dass die Nullhypothese gilt, dass dieser Zusammanhang also in der Grundgesamtheit nicht existiert. Je größer die Stichprobe, desto geringere Effekte werden als signifikant gekennzeichnet.
- Es liegt also nahe, die Kennzeichnung von Signifikanz in solchen Fällen zu unterdrücken, in denen der vorgefundene Unterschied einen vom Benutzer vorzugebenden Minimalwert nicht erreicht. Die Statistik kennt hierfür Maße der Effektstärke, die sonst auch als Zusammenhangsmaße verwendet werden.
- Die am häufigsten verwendeten Signifikanztests in den Tabellenbänden testen Unterschiede von Anteilen (Prozentwerten) oder von Mittelwerten.
- Zur Messung der Effektstärke bei Tests aus der ChiQu-Familie (
COLCHIQU
,ROWCHIQU
,HYCOLCHIQU
etc.) wird Cramer´s Phi berechnet (das numerisch identisch ist mit Cohen´s w). Wird hierbei nicht mindestens ein Effekt der StärkeSIGNIFMINEFFECTCHIQ
erreicht, wird die Ausgabe des Signifikanzbuchstabens für diese Zelle unterdückt. Der Wertebreich von Phi ist 0 bis 1. - Für die Bewertung von Mittelwertunterschieden (
TTEST
,MEANTEST
,HYMEANTEST
,ESSMEANTEST
etc.) wird Cohens d berechnet. Der Mechanismus funktioniert entsprechend: Wird nicht mindestens ein Effekt in Höhe vonSIGNIFMINEFFECTTTEST
erreicht, wird der Signifikanzbuchstabe unterdrückt. Wie bei allen Maßen für Effektstärke bedeutet 0 auch hier, dass kein messbarer Zusammenhang besteht. Cohens d kann aber auch Werte größer 1 annehmen. - In aller Regel wird man für Cramer´s Phi (
SIGNIFMINEFFECTCHIQ
) kleinere Grenzwerte ansetzen als für Cohens d (SIGNIFMINEFFECTTTEST
). Wenn bei letzterem die “Pooled Variance” den Wert 0 hat, wird Cohens d numerisch unzulässig (vulgo unendlich). In dem Fall wird der Test nicht durchgeführt. -
SIGNIFMINEFFECTCHIQ
bzw.SIGNIFMINEFFECTTTEST
sind Tabellen-Voreinstellungen, sie gelten für alle in der Folge vereinbarten Tabellen. - Mit
SIGNIFMINEFFECTCHIQ
oderSIGNIFMINEFFECTTTEST
= 0; kann man die Restriktion wieder ausschalten. - Wird durch einen dieser Tests ein Signifikanzbuchstabe unterdrückt, wird dies ggf. im STATTESTDUMP-File protokolliert.
26.05.2017: Warnung im Zusammenhang mit INSTITUTION = “”;
- Bis Ende 2016 war der Institutsname, so wie in der Lizenz vereinbart, immer Bestandteil der Ausgabe von
INSTITUTION
. Dies diente als ein minimaler Kopierschutz. - Seit der Einführung des Lizenzsystems über das Internet ist dies nicht mehr erforderlich, und Kunden hatten darum gebeten, dass man den Text von
INSTITUTION- komplett anpassen kann. Die Software wurde entsprechend angepasst.
- Da der Inhalt von
INSTITUTION
der Name des ersten Sheets bei Ausgabe mitINSTANTEXCEL
ist, gibt es dann Probleme, wennINSTITUTION = "";
gesetzt wird, da Excel einen leeren String nicht als Name eines Sheets akzeptiert. - Der Lauf wird dann mit der dem Runtimeerror “cannot set name of sheet in excel” abgebrochen.
- Abhilfe:
INSTITUTION = "";
vermeiden, wenn eine Excel-Ausgabe geplant ist
26.05.2017: Anpassung der Namen atomarer Variablen
- Betrifft die Anpassung der Namen atomarer Variablen von MULTIQ und DICHOQ bei der Speicherung in ASCIIOUTFILE DELIMITED an die Namen, die GESS Q. ausgibt.
- Die Namen werden jetzt bei Verwendung von
MODIFYCSVNAMES = YES;
dem angepasst, wie GESS Q. solche Variablen benennt. - Die Namensbestandteile “ $1” etc. werden in “_1” etc. umgewandelt.
23.05.2017: Funktionsanpassung bei CALCULATECOLUMN
-
CALCULATECOLUMN
wertet Zahlenwerte aus, die den Zellen eindeutig zugeordnet sind. - Diese konnten allerdings auch Zahlenwerte sein, die bei der weiteren Verarbeitung der Ausgabe unterdrückt werden, z.B. durch
SUPPRESSIFLESS
. -
CALCULATECOLUMN
prüft jetzt, ob diese Zellen im Verlauf der Ausgabe einen String enthalten, der einen Zahlenwert darstellt: nur dann wird der Zellenwert ausgewertet. Sonst gilt die Zelle als missing.
09.05.2017: neue syntaktische Variante von MARKCELLS
- auf Basis von Häufigkeiten in PS und PDF
Syntax:
MARKCELLS = YES COMPUTE COLOR SIGNIFLEVEL [ SIGNIF90 | SIGNIF95 | SIGNIF99 | SIGNIF999 ] GT <colorGT> LT <colorLT> ;
- In dieser Version (
MARKCELLS COMPUTE
) wird für jede Zelle aus den Randverteilungen und der Zellenbesetzung die “Unwahrscheinlichkeit” der empirischen Besetzung als p‑Wert berechnet. - Aus dem
SIGNIFLEVEL
ergibt sich ein Intervall (0..SIGNIFLEVEL
). - Die Zellen, deren p‑Wert in diesem Intervall liegt, werden farblich gekennzeichnet.
- Eine Zelle mit dem p‑Wert=0 wird mit einem benannten Farbwerte (
colorGT
bzw.colorLT
) gefärbt. - Zellen, deren p‑Wert größer ist als das
SIGNIFLEVEL
, behalten einen weißen Hintergrund. - Zellen, deren p‑Werte zwischen 0 und
SIGNIFLEVEL
liegen, werden mit einer proportional angepassten Farbe zwischencolorGT
bzw.colorLT
und weiß eingefärbt. - Lange Rede, kurzer Sinn: Je signifikanter die Abweichung vom Erwartungswert, desto kräftiger die Farbmarkierung.
- Wenn
TABLEFORMAT EXCELCOLOR
gesetzt ist, werden die Hintergrundeinfärbungen auch in Excel übertragen.
03.05.2017: neues CELLELEMENT MARKCELLSPVALUE
- Der Einfärbung von Zellen im Zuge von
MARKCELLS
liegt ja immer irgendein Signifikanztest zugrunde, meistens 2x2-Chiquadrat-basiert. - Man kann für die Abschätzung die Methoden CLASSIC, COLCHIQU, ROWCHIQU etc. einsetzen.
- Die Entscheidung für eine Farbe zur Kennzeichnung geschieht anhand des p‑Wertes.
- Diesen Wert kann man nun auch als ein
CELLELEMENT
ausgeben. - 0.05 enstpricht dem 5%-Niveau, also sollte man ein passendes Format vorsehen, z.b. ‘#.###’.
- Werte > 0.20 werden der Übersichlichkeit halber nicht explizit ausgegeben, sondern durch “–” ersetzt.
15.03.2017: geänderte Voreinstellung zu SPSSSINGLEWRITE
- Die Voreinstellung ist immer YES.
- Wenn man große Mengen von Valuelabels in einem
WRITESPSSFILE
versenken muss, kann man diese Voreinstellung auf NO ändern. - Es hat sich herausgestellt, dass die Methode zum schnellen Speichern auch in der Windows-Version nicht in allen Fällen sicher funktioniert.
16.02.2017: neues Statement IGNORESPSSMISSINGVALUES
Syntax:
IGNORESPSSMISSINGVALUES = [ YES / NO ];
- Wenn eine Variable beim Einlesen eines SPSS-Files den Wert des internen
SysmisVal
von SPSS hat, dann wird dieser beim Einlesen durch denSETMISSING
-Wert von GESS ersetzt. - Alle Variablenwerte aus dem sav-File werden dann als gültig übertragen.
16.02.2017: neues Statement IGNORESPSSSYSMISVAL
Syntax:
IGNORESPSSSYSMISVAL = [ YES / NO ];
- Mit diesem Schalter kann man GESStabs anweisen, die MISSING VALUES in einem SPSS-sav-File beim Einlesen mit SPSSINFILE zu ignorieren.
- Alle Variablenwerte aus dem sav-File werden dann als gültig übertragen.
13.02.2017: Bugfix
- Betrifft:
SPSSOUTFILE
- Die Standardübergabe von
VALUELABELS
an die SPSSIO-Schnittstelle hatte sich in einigen Fällen als zu langsam erwiesen. - Diese Übergabe wurde auf eine andere Methode der SPSSIO-API umgestellt.
- Hierbei ist leider ein Filter verlorengegangen, der Overcodes nicht durchgelassen hat, sodass Overcodes unnötig an SPSS übertragen wurden.
- Gefixt!
13.02.2017: Neues Statement #DOMACRO4
Syntax:
#domacro4 (<filename>)
- Einen ähnlichen Hintergrund wie
#DOMACRO3
hat auch das#DOMACRO4
-Statement. - Der Unterschied ist, dass der Name des Makros nicht im Skript festgelegt wird, sondern als erstes Feld in der CSV-Datei benannt wird.
- Der Aufruf
#domacro4(macrocalls4.csv)
würde bei dem folgenden Inhalt der Datei ‘macrocalls4.csv’
table;a11;a12;
tablea;a11;a13;
tableb;a11;a14;
tablea;a11;a15;
tableb;a11;a16;
table;a11;a17;
die Existenz von drei Macros voraussetzen,#table
,#tablea
und#tableb
. - Die Existenz geeigneter Tabelliermakros vorausgesetzt, können so auch Mitarbeiter, die mit dem Tabellieren nicht vertraut sind, eigene Tabellen definieren.
13.02.2017: Neues Statement #DOMACRO3
Syntax:
#domacro3 (<macroname> <filename>)
- Wie auch
#DOMACRO
und#DOMACRO2
dient das#DOMACRO3
-Statement der wiederholten Abarbeitung von Makros. - Die Makro-Parameter werden hierbei aus einer CSV-Datei entnommen, die am einfachsten mit einem Tabellenverarbeitungsprogramm erzeugt werden kann.
- Dadurch bietet es eine Schnittstelle zu Mitarbeitern, die nicht im Scripting versiert sind.
- Als erster Parameter wird der Makroname übergeben, als zweiter Paramater der Pfad einer CSV-Datei, die zeilenweise die Parameter enthält, die an das genannte Makro übergeben werden sollen.
- Jede Zeile der CSV-Datei generiert einen Makro-Aufruf.
- Die einzelnen Felder ( durch ‘;’ getrennt ) werden als die einzelnen Parameter interpretiert.
Ein einfaches Beispiel:
- Gegeben sei folgendes Makro:
#macro #table( &1 &2 ) table = &1 by &2; #endmacro
- … und folgender Aufruf:
#domacro3( table, macrocalls.csv )a11;a12;
- Die CSV-Datei ‘macrocalls.csv’ enthält folgende Zeilen:
a11;a13;
a11;a14;
a11;a15;
a11;a16;
a11;a17;
- Hierdurch würden 6 verschiedene Tabellen erzeugt:
a11 by a13
,a11 by a14
etc.
13.02.2017: Neues Statement SPSSSINGLEWRITE
- Die Übergabe von
VALUELABELS
an SPSS-.sav-Files wurde aus Performancegründen auf eine SPSS-Methode umgestellt, die wesentlich effizienter identische valulabels an mehrere Variablen überträgt. - Leider führt diese Methode in einigen Fällen zu Fehlernvinnerhalb der SPSS-API.
- Da dieser Fehler mit der SO-Bibliothek unter Linux regelmäßg auftritt, wird diese schnellere Methode unter Linux mit der Voreinstellung ‘NO’ automatisch unterbunden.
Syntax:
SPSSSINGLEWRITE = [ YES | NO ] ;
(Voreinstellung: Windows: NO, Linux: YES)
12.01.2017: Bugfix
- Betrifft
CVSINFILE
- Inhalte von Alpha-Variablen im csv-Infile, die ein Semikolon enthalten, wurden vom
CVSINFILE
falsch interpretiert: Ein Semikolon wurde auch innerhalb von durch ” oder ’ eingeschlossenen Strings als csv-Trenner interpretiert. - Gefixt!
11.01.2017: Erweiterung der Datenübergabe an GESS ChartFactory
- Die Datenübergabe an GESS Chartfactory erfolgte bislang als Text-Tatei in einem csv-ähnlichen Format.
- Dieselbe Information wird jetzt auch als xlsx-Datei gespeichert.
- Hintergrund: Excel liest beim Einspielen in einem csv-ähnlichen Format eigenwillig bei Zahlen mit Dezimalstellen immer mindestens zwei Nachkommsstellen, auch wenn nur eine vorhanden ist…
11.01.2017: Bugfix
- Betrifft
INSTITUTION
in HTML. - Bei der Ausgabe von Tabellen in HTML wurde fehlerhaft die
INSTITUTION
aus dem Lizenzschlüssel verwendet. - Jetzt wird der
INSTITUTION
-String verwendet, der ggf. durch dasINSTITUTION
-Statement modifiziert wurde
22.11.2016: Neue Option CALCCOLLOWACCURACY
-
CALCCOLLOWACCURACY
= CALCulateCOLumnLOWACCURACY
Syntax:
CALCCOLLOWACCURACY = [ YES | NO ] ;
- Globaler Schalter für den gesamten Lauf
- Bei
CALCULATECOLUMN
undCOLUMNSUMMARY
werden bei Berechnungen als Default die exakten Werte der Zellinhalte herangezogen. - Diese können von den in der Tabelle dargestellten Werten abweichen: ein Wert von 2.352121326 wird in der Tabelle z.b. als 2.4 dargestellt. Wenn man mit Werten mit allen Nachkommastellen rechnet, kann sich z.b. als Differenz ein anderer Wert ergeben, als wenn man nur die ausgewiesenen Ziffern heranzieht.
- Bei manchen Kunden bewirkt man aber keine Zufriedenheit über eine gestiegene numerische Genauigkeit, sondern eher Ablehnung und Beharren auf die Anzeige des Taschenrechners.
- Man kann mit diesem Schalter die Genauigkeit herabsetzen: dann rechnet GESStabs ungenau, wie gewünscht.
15.11.2016: Neue Funktion COLUMNSUMMARY
Syntax:
COLUMNSUMMARY <zielspalte> [ format "#,#..." ] = <function> [ <option>( {<quellspalte>}*n ); <zielspalte> ::= < varno code > <quellspalte> ::= < varno code > <function> ::= [ MEAN | SUM | MIN | MAX ] <option> ::= [ ZEROMISSING | DASHMISSING ]
- Zusätzlich zur Berechnung von Spalten mittels
CALCULATECOLUMN
gibt es hiermit eine weitere Funktion, um in Tabellen weitere Spalten aus bereits bestehenden Spalten zu errechnen. - Über beliebige Quellspalten kann man als Summary den Mittelwert, die Summe, das Minimum oder das Maximum ausgeben.
- Außerdem können die Resultate sowohl mit
CALCULATECOLUMN
als auch mit weiterenCOLUMNSUMMARY
-Statements weiterverarbeitet werden. - Mit den Optionen
ZEROMISSING
undDASHMISSING
kann man steuern, ob leere Zellen in die Berechnung eingehen oder ausgeschlossen werden sollen. - Mit
DASHMISSING
werden Zellen, die mittels ‘-’ als leer gekennzeicnhet sind, vor den Berechnungen ausgeschlossen. Hier gibt es keine Automatik, weil es z.b. bei der Berechnung einesMEAN
über Prozentwerte sinnvoll sein kann, diese Zellen als 0 in die Berechnung einfließen zu lassen. - Bei Prozentwerten in Tabellen wird mit ‘-’ oft eine Zellenbesetzung mit null signalisiert. Bei einem
MEAN
überMEAN
steht das ‘-’ hingegen meist für einen nicht berechenbaren Wert. Da derCOLUMNSUMMARY
-Operator keine Kenntnis über die Natur der Zahlen hat, muss es hier eine Steuerungsmöglichkeit im Script geben. - Der Vollständigkeit halber kann man mittels
ZEROMISSING
auch Zellen aussschließen, in denen eine numerische Null steht. - Beide Optionen werden wohl am häufigsten bei
MEAN
oderMIN
benötigt. Bei SUM ist es ja relativ gleichgültig, ob eine Null addiert wird oder nicht.
22.9.2016: Bugfix
- Betrifft die Font-Selektion bei
CALCULATECOLUMN
. - Zur Definition des Fonts von Werten, die man mit
CALCULATECOLUMN
berechnet hat, gibt es zwei Methoden, von denen eine allerdings einen Bug hatte:
a) Hat immer funktioniert: Man vergibt einen Font für das Label und erzwingt dessen Weitergabe mittels
INHERITFONT [x]
. In diesem Fall wird neben den
CELLELEMENT
-Font auch der Label-Fontbeeinflusst. Beispiel:
groups kopf1 = | total : 1 eq 1 | code3 : a12 eq 3 | code4 : a12 eq 4 | code5 : a12 eq 5 | code1 usefont "Times-Roman" size 13 : 2 eq 1 | code2 : 2 eq 1 ; inheritfont y = no; inheritfont x = yes; table = kopf1 by a11; CALCULATECOLUMN <1 5> = <1 2> + <1 3>; CALCULATECOLUMN <1 6> = <1 2> - <1 3>;
b) Funktioniert jetzt auch: Man vergibt ein
CELLELEMENT
für das label und definiert einen
USEFONT
für dieses
CELLELEMENT
. Beispiel:
groups kopf2 = | total : 1 eq 1 | code3 : a12 eq 3 | code4 : a12 eq 4 | code5 : a12 eq 5 | code1 cellelements ( physicalrecords ) : 2 eq 1 | code2 cellelements ( physicalrecords ) : 2 eq 1 ; inheritfont y = no; inheritfont x = no; cellelements = columnpercent; usefont physicalrecords = "Times-Roman" size 13; globalcolminimum = 0; table = kopf2 by a11; CALCULATECOLUMN <1 5> = <1 2> + <1 3>; CALCULATECOLUMN <1 6> = <1 2> - <1 3>;
22.9.2016: Bugfix
- Betrifft
COLUMNPERCENT
alsCELLELEMENT
fürSORT
imTABLE
-Statement. - Der Sortieralgorithmus berechnete das
CELLELEMENT COLUMNPERCENT
auf Basis einer nicht korrekt ermittelten Randzelle. - Gefixt!
22.9.2016: neues TABLEFORMAT IDENTCHIQNOSIGNIF
- Wenn man Variablen gegen sich selbst tabelliert und dabei einen
COLCHIQU
-Test mitlaufen lässt, dann sind die Abweichungen in den Zellen in dieser Subtabelle numerisch hochsignifikant, inhaltlich allerdings hoch uninteressant. - Es gab den Kundenwunsch, die Signifikanz-Buchstaben in diesem Fall nicht anzuzeigen.
- In solchen und ähnlichen Konstellationen kann man jetzt die Ausführung der
CHIQU
-Signifikanztests mit dem TableformatIDENTCHIQNOSIGNIF
ausschließen. - Für einen Chi²-Test werden die Zellen zusammengefasst, sodass nur eine 4‑Felder-Tabelle übrig bleibt. Wenn in beiden Zeilen dieser Tabelle eine Zelle gleich der Randverteilung ist (was bedeutet, dass die andere Zelle = 0 sein muss), wird der Signifikanztest unterdrückt.
22.9.2016: Bugfix
- Betrifft die Übergabe von Tellinhalten aus XTAB-Tabellen an GESS ChartFactory.
- Das
POWERCHART
-Statement berechnet die Werte zur Übergabe an PowerPoint selbst. Bei der Ermittlung von Werten fürCELLELEMENTS
, die auf einer Randzelle beruhen, traten sporadisch Fehlberechnungen auf. - Gefixt!
30.8.2016: zusätzliches Encoding bei CSVINFILE
- In UTF‑8 encodierte CSV-Dateien dürfen jetzt auch ein BOM haben.
Syntax:
ENCODING CSVINFILE = UTF8BOM;
- Wenn das aktuelle GESS Q. CSV-Dateien in UTF8BOM schreibt, erleichtert dies die Verwendung von GESS Q.-Daten im CSV-Format mit Excel, da Excel UTF‑8 mit BOM erkennt.
- Ein wesentlicher Vorteil von CSV-Dateien ist ja, dass keine Spaltenfixierung besteht, sodass die variierende physikalische Länge von Zeichen keine Probleme bereitet, und UTF‑8 deshalb universell einsetzbar ist.
29.8.2016: Dokumentationsnachtrag: property NOREPORT
- Eine Variable mit der Property
NOREPORT
wird in der Ausgabe durch report.exe unterdrückt.
Beispiel-Syntax:
NOREPORT sysnum sysdate systime = NO;
5.8.2016: neues CELLELEMENT MINMAX
Syntax:
MINMAX( <variable> )
- Je Zelle werden das Minimum (0‑Perzentil) und das Maximum (100-Percentil) ermittelt.
- Minimal- und Maximalwert werden nacheinander, durch einen Punkt getrennt, ausgegeben.
-
FORMAT MINMAX
wird ausgewertet.
5.8.2016: neue Signifikanzniveaus
Wenn’s der Wahrheitsfindung dient…
- Neue Signifikanzniveaus:
SIGNIF68 SIGNIF32AND10
-
SIGNIF68
ist wieSIGNIF90
ein einfacher Signifikanztest (auf nur einem Level), 68% (bzw. 32%) -
SIGNIF32AND10
ist wieSIGNIF20AND10
ein Signifikanztest auf zwei Level, 32% (minuskel) und 10% (majuskel)
20.7.2016: POSTREPLACE
-
-
- Neue Tabellenoption:
POSTREPLACE
- Neue Tabellenoption:
-
Syntax:
POSTREPLACE <cellelement> : <text1> = <text2> [ IF <text3> ]
- Nachgestellte Option zum
TABLE
-Statement - In der voranstehenden Tabelle werden alle Ausgabezeilen zu dem genannten
CELLELEMENT
daraufhin durchsucht, ob<text1>
in der Ausgabe enthalten ist. Wenn das der Fall ist, wird dieser Text durch<text2>
ersetzt. Der Suchtext<text1>
kann “?” als Wildchar enthalten. Man kann diese Ersetzung mit einer zusätzlicheh Bedingung versehen, dass<text3>
ebenfalls enthalten ist. - Praktisches Beispiel: In einer Tabelle sollen
COLUMNPERCENT
dargestellt werden. In den Spalten aber, in denen die Basis einen Schwellwert unterschreitet, soll stattdessen die absolute Zellenbesetzung ausgegeben werden, und diese soll mit “N=” gekennzeichnet werden. Dieses Problem wird durch eine Kombination ausPOSTPROCESS
undPOSTREPLACE
gelöst:
FORMAT COLUMNPERCENT = '#'; CELLELEMENTS = COLUMNPERCENT; TABLE = #K BY A12; POSTPROCESS COLUMNPERCENT : IF XABS LT 150 THEN SELF = -CELLABS; POSTREPLACE COLUMNPERCENT : "-" = "N=";
- Das Ganze ist natürlich “getrickst”:
POSTPROCESS
ist eine arithmentische Snweisung und kann nur Zahlenwerte beeinfussen. Die arithmetische Eigenschaft “negativ” übersetzt sich allerdings in einen Textbestandteil, ein “-” vor der Zahl. Dies kann man dann für eine Textersetzung nutzen. - Die Aufgabe war einfach, da für
COLUMNPERCENT
ein Darstellungsformat ohne Dezimalzeichen verlangt war. Etwas umfangreicher wird es, wenn ein komplexeres Format gefordert ist:
FORMAT COLUMNPERCENT = '#,#%'; CELLELEMENTS = COLUMNPERCENT; TABLE = #K BY A12; POSTPROCESS COLUMNPERCENT : IF XABS LT 150 THEN SELF = -CELLABS; POSTREPLACE COLUMNPERCENT : ",?%" = "" IF '-'; POSTREPLACE COLUMNPERCENT : "-" = "N=";
-
POSTPROCESS
ist identisch. MehrerePOSTREPLACE
werden in derselben Reihenfolge nacheinander ausgeführt, wie sie in Script stehen. Das erstePOSTREPLACE
lässt das Dezimalzeichen und %-Zeichen verschwinden, unter der Bedingung, dass ein Minuszeichen gefunden wurde. Das zweitePOSTREPLACE
ersetzt wie gehabt das “-” durch “N=”. - Nächste Stufe: wenn zusätzlich die Ausgabe eines Signifikanztests gefordert ist:
CELLELEMENTS = COLPERCANDSIGN; SUPPRESSIFLESS COLPERCT FRAMECELL X ABSOLUTE = 150; ZERODASHCHAR = ' '; TABLE = #K BY A12; POSTPROCESS COLUMNPERCENT : IF XABS LT 150 THEN SELF = -CELLABS; POSTREPLACE COLUMNPERCENT : ".?%" = "" IF '-'; POSTREPLACE COLUMNPERCENT : "-" = "N=";
- Hierzu muss man wissen:
COLPERCANDSIGN
ist eine Textkombination ausCOLUMNPERCENT
undCOLPERCT
. Wenn in den Spalten mit n<150 nur die einfache Häufigkeit als vorzeichenlose und nachkommafreie Zahl stehen soll, dann müssen wir zunächst die Ausgabe des Signifikanztests in den betreffenden Spalten unterdrücken. dazu braucht es einSUPPRESSIFLESS
für
den verwendeten Signifikanztest, in diesem Fall alsoCOLPERCT
. - Wenn ein
CELLELEMENT
mitSUPPRESSIFLESS
unterdrückt wird, steht an der Stelle i.d.r ein ‘-’. das ist derZERODASHCHAR
, der hier dadurch unsichtbar wird, dass wir ihn als Blank darstellen. Der Rest ist bekannt:POSTPROCESS
und 2xPOSTREPLACE
wie oben. - Alternativ zum “Unsichtbarmachen” durch ein Blank im
ZERODASHCHAR
hätte man diesen natürlich auch durch ein weiteresPOSTREPLACE
entfernen können:
POSTREPLACE COLPERCT : "-" = "";
20.6.2016: neue Labeloption CSSCLASS
- Erweiterung der Ausgabe nach HTML
- Analog zu
USEFONT
für PS/PDF-Ausgabe kann man Labels jetzt auch eineCSSCLASS
hinzufügen. Diese wird nur bei der Ausgabe in eine HTML-Datei berücksichtigt. Z.B.:
SINGLEQ q5 = TEXT " Frage 5: Wie gefällt Ihnen Modell XYZ" 20 7 1 LABELS OVERCODE 1:3 "sehr gut/gut" CSSCLASS overcodePos OVERCODE 4:6 "sehr schlecht/schlecht" CSSCLASS overcodeNeg 1 'sehr gut' * 'gut' * 'teils/teils' * 'schlecht' * 'sehr schlecht' ;
- In der CSS-Datei könnten dann für
overcodePos
undovercodeNeg
entsprechende Darstellungen vereinbart werden. z.b. bold und rot bzw. grün als Textfarben.
20.6.2016: Erweiterung CSVINFILE
CSVINALPHA = <namelist>;
- Alternativ zur Kennzeichnung von ALPHA-Variablen mittels “@” im Variablennamen kann man auch eine Liste von Variablennamen angeben. Werden dann im Header eines
CSVINFILE
entsprechende Variablennamen gefunden, werden diese auch ohne “@” als ALPHA-Variablen verarbeitet.
20.06.2016: Bugfix CSVINFILE
- Bei mehreren
CSVINFILE
s konntenMULTIQ/DICHOQ
zuviele atomare Variablen enthalten. Das führte zwar nicht zu falschen Daten, aber zu ineffizienteren Strukturen. - Gefixt!
6.6.2016: Bugfix INSTANTEXCEL
- Negative Zellinhalte (z.b.
MEAN
) wurden an Excel in Stringform übergeben anstelle der üblichen Binärübertragung mit einem Darstellungsformat. Je nach nationaler Einstellung von Excel und des verwendeten Zahlenformats bei der GESS-Tabellenausgabe ergab dies falsche Darstellungen. - Ist gefixt: negative Ergebnisse werden jetzt auch binär übertragen.
2.6.2016: Funktionserweiterung bei OVERVIEW/XOVERVIEW
OVERVIEW ADD = ... XOVERVIEW ADD = ...
-
OVERVIEW
bzw.XOVERVIEW
erzeugen Übersichtstabellen durch eine verborgene Übersetzung inTABLE ADD
-Statements. D.h. der Compiler erzeugt eineTABLE STRUCTURE
und fügt die numerischen Werte durchTABLE ADD
ein. - Dies legte es nahe, die Zählung weiterer Daten in die von
OVERVIEW/XOVERVIEW
erzeugteTABLE STRUCTURE
durchOVERVIEW ADD
bzw.XOVERVIEW ADD
analog zuTABLE ADD
ermöglichen, z.B.:
OVERVIEW = #K BY ABSOLUTE MEAN( A12 A13 A14 ); OVERVIEW ADD = #K BY ABSOLUTE MEAN( B12 B13 B14 );
22.2.2016: neues Ausgabeformat für VARLIST: QST
Syntax:
VARLIST = <Dateipfad> QST;
- Werden die Variablen mit Bezug zu einem spaltenfixierten Datensatz und ihre Verspaltung in einem speziellen QST-Format dargestellt.
22.2.2016: CONTENTKEY-Funktion für CHAPTERPAGE
-
CHAPTERPAGE
ist formal ein Abkömmling des Grundtyps “Tabelle”. - Man kann einer
CHAPTERPAGE
deshalb mit demCONTENTKEY
-Statement auch einen Eintrag für das Inhaltsverzeichnis zuweisen. - Dieser Text wird dann in Inhaltsverzeichnisse übernommen.
22.2.2016: ACROSS und EXCELOUTACROSS
- Neue
TABLEFORMATS
:ACROSS
undEXCELOUTACROSS
- Für Nutzer, die nicht davon lassen können, ihre Charts von Hand aus Excel-Tabellen abzuleiten, gibt es jetzt die Möglichkeit, die einzelnen
CELLELEMENTS
nebeneinander anstatt des GESS-Standards untereinander anordnen zu lassen. - Das Tableformat
EXCELOUTACROSS
beschränkt diesen Umbau auf die Ausgabe inEXCELOUT AS/VIA HTML
. - Mit dem allgemeineren
ACROSS
werden auch dieCELLELEMENTS
in PS-und PDF-Ausgaben nebeneinander dargestellt.
11.2.2016: UNIXTIME und CURRENTMILLIS
- Neue
TIME
-Funktionen:UNIXTIME
undCURRENTMILLIS
- Für Berechnungen von verstrichener Zeit im zusammenhang mit GESS Q.-Files fehlte eine praktische Form der aktuellen Uhrzeit in der Form von Sekunden (
UNIXTIME
) oder Millisekunden (CURRENTMILLIS
) seit 1970 (Unix epoch). - Wie
TIME
sind dies Funktionen innerhalb arithmetischer Berechnungen, z.B.:
COMPUTE myUNIXTIME = UNIXTIME( 0 ); COMPUTE myCURRENTMILLIS = CURRENTMILLIS( 0 );
- Das Resultat entspricht der von Windows gelieferten lokalen Zeit.
8.2.2016: PUSHSTARTCOLUMN und POPSTARTCOLUMN
- Neues Statements:
PUSHSTARTCOLUMN
undPOPSTARTCOLUMN
- Die GESS-Produkte erzeugen automatisch während des Interpretierens des Scripts eine zusammenhängende Verspaltung im Datensatz. Wenn man nun zwischen Frage 1 und Frage 2 eine zusätzliche Frage einbauen will, darf diese die einmal verwendete Verspaltung nicht verändern.
Aus:
Singleq Frage1 = … * Singleq Frage2 = … *
Soll werden:
Singleq Frage1 = … * Singleq Zusatzfrage1 = … MultiQ Zusatzfrage2 = … * Singleq Frage2 = … *
- Am elegantesten geht das mit einem Stack. GESS kennt jetzt einen Stack der als nächstes zu verwendenden Spalte.
- Mit einem Push definiert man einen neuen Anfangswert für die folgenden Fragen, mit dem folgenden Pop wird die Verspaltungsumgebung auf den Zustand vor dem Push zurückgesetzt.
Singleq Frage1 = … * PushStartColumn = 500; SingleQ Zusatzfrage1 = … * MultiQ Zusatzfrage2 = … * PopStartColumn; Singleq Frage2 = … *
- Dies gilt für alle spaltenbezogenen Fragetypen: SingleQ, SingleQ Alpha, MultiQ und DichoQ.
- GESStabs kennt diesen Mechanismus genauso und errechnet die Herkunftsspalten analog.
27.1.2016: Bugfix DICHOQ NOINPUT
- Das
DICHOQ
hat zwar die EigenschaftNOINPUT
syntaktisch akzeptiert, in der Folge aber in einem GESS Cati-Script die Frage trotzdem zum Input dargestellt. - Ist jetzt gefixt. z.b.:
DICHOQ dichobula = NOINPUT 220 '1' * '2' * '3' * '4' * '5' * '7' * '6' * '8' * '9' * '10' * '11' * '12' * '13' * '14' * '15' * '16' EQ 1; COMPUTE LOAD dichobula = bula;
- Würde die Information bula als dichotome Variable mit 16 mal 0/1 ab Spalte 220 im Ausgabedatensatz darstellen, aber nicht abfragen.
27.1.2016: Erweiterung für SINGLEQ
- Im
SINGLEQ
‑Statement kann man jetzt auch die eigenschaftNOINPUT
angeben. z.b.:
SINGLEQ Nachname = ALPHA NOINPUT 200 20;
- Eine solche Variable hätte in einem GESS Cati-Script die Eigenschaften eines Ausgabebereichs im Datensatz, würde aber nicht im schirm zur abfrage vorgelegt.
- Für diesen Zweck wurde bislang immer die altehrwürdige Form
VARNAME
verwendet. Für neue Benutzer ist das schwer zu vermitteln.
27.1.2016: MAKESINGLE
Erweiterung:
MAKESINGLE <newvar> = ALPHA;
- Zusätzlich zu den Syntaxvarianten:
MAKESINGLE <newvar>; MAKESINGLE <newvar> [ = <arithm.expression> ];
- Gibt es jetzt eine zusätzliche Variante:
MAKESINGLE <newvar> = ALPHA;
- Hierbei wird eine neue leere
SINGLEQ
mit der EigenschaftALPHA
erzeugt.
22.1.2016: CITEFIRSTVAR/CITEALLVARS bei OVERVIEW/XOVERVIEW
- Im Zusammenhang mit
OVERVIEW
oderXOVERVIEW
läuft die automatische Zitierung von Variablentexten ins Leere, da dieCONTROLVAR
, die die Grundlage der Zitierung ist, in beiden Fällen eine synthetische Variable unbekannten Namens ist, die während der Interpretation des OVERVIEW-Statements erst gebildet wird. Daher kann man dieser Variablen auch keinen Text zum Zitieren beigeben. - Die Verarbeitung der
OVERVIEW
-Statements ist jetzt so erweitert, dass der Vartext der ersten Variablen in der Variablenliste der internen synthetischen Variable zugefügt wird. - Langer Rede, kurzer Sinn:
CITEFIRSTVAR
und Konsorten funktionieren in diesem Zusammenhang jetzt auch.
22.1.2016: Interpretation von OPENQ-Files
- Historisch gewachsen: Um die Arbeit mit
OPENQ
-Files zu vereinfachen, gab es die Konvention, kurze Zeilen kurzerhand auszuschließen und kommentarlos nicht zu verarbeiten. OPENQ-Files mit weniger als 10 Zeichen galten als Schrott. Von GESS produzierteOPENQ
-Files sind immer länger. - Man kann dieses Format aber natürlich auch anders nutzen und da sind Kunden an diese Untergrenze gestoßen:
OPENQ
-Zeilen mit weniger als 10 Zeichen sind dabei untergegangen. - Da
OPENQ
-Files oft nach Bearbeitung in Editoren oder Tabellenkalkulationsprogrammen Schrott-Zeilen enthalten, ist dieser Mechanismus grundsätzlich erhaltenswert. - Die Untergrenze von 10 Zeichen ist aber wohl zu klein, wenn einstellige Variablennamen, einstellige Fallnummern und einstellige Codes verwendet werden.
- Die kürzest mögliche
OPENQ
-Zeile dürfte sein:
- Das macht minimal 7 Zeichen. Wenn die Files außerhalb von GESS erzeugt werden, mag auch das Trennzeichen nach dem Code fehlen, also minimal 6 Zeichen.
- Zeilen werden nur noch dann geschrottet, wenn sie weniger als 6 Zeichen enthalten.
22.1.2016: Neues CELLELEMENT: PHI
- Der 4‑Felder-Phi-Koeffizient misst den Zusammenhang zwischen Ausprägungen.
- Dieses
CELLELEMENT
dürfte nur in speziellen Fällen sinnvoll sein, entsprach aber einem Kundenwunsch. - Wenn man Mehrfachnennungsvariablen tabelliert, kann man die einzelnen Ausprägungen ja als unabhängige 0/1‑Variablen betrachten. Damit eröffnet sich die Möglichkeit, die zugrunde liegende 4‑Felder-Tabelle zu rekonstruieren, und auf dieser Basis den Koeffizienten zu bestimmen.
- Ein Beispiel: Wenn Befragte mehrere Nennungen für Entscheidungsgründe abgeben können, dann kann man diese Variable gegen sich selbst tabellieren. Den Phi-Koeffizienten kann man dann als den Zusammenhang zwischen den Gründen interpretieren: Ein negativer Koeffizient z.b. würde anzeigen, dass die Befragten, die Grund A genannt haben, seltener Grund B angeben. usw..
4.1.2016: Neues CELLELEMENT: SPACE
Syntax:
SPACE( <variable > )
- Die Aufgabe von
SPACE
(es könnte auchEMPTY
heißen) ist lediglich, eine leere Zelle zu produzieren. - Diese wiederum werden u.U. benötigt, um leere Zeilen bzw. Spalten in Tabellen für PowerPoint zu erzeugen.
Für Neuigkeiten aus 2015 und früher, siehe READ.ME!
Hier informieren wir Sie über ausgewählte neue Funktionen und Einstellungen für GESStabs!
Eine vollständige Dokumentation aller aktueller und vergangener Software-Updates findet sich im aktuellen Read.me.
03.03.2020 (5.1.3.7): Neue Option zum OFFICECONTENTPAGE-Statement: NOAUTOTABLETITLE
13.11.2019 (5.1.3.6): Neue Option zu OFFICECONTENTPAGE: BACKTOCONTENT
Syntax:
OFFICECONTENTPAGE = | BACKTOCONTENT : <anystring> [ <textqualifier> ] <textqualifier> ::= [ <officefont> | FOREGROUND <color> | BACKGROUND <color> ] <officefont> ::= FONT <fontname> SIZE <number> [ OPTION [ BOLD | ITALIC | UNDERLINE ] ];
Bei dieser Option wird in jedes EXCEL-Tabellenblatt oben links (A1) der angegebene Text ausgegeben, und diese Zelle wird mit einem Hyperlink auf das Inhaltsverzeichnis hinterlegt. Bei einem Klick auf diese Zelle, wird das Inhaltsverzeichnis angesprungen.
Beispiel:
OFFICECONTENTPAGE = ... | BACKTOCONTENT : "Zurück zum Inhalt" FONT Arial SIZE 9 OPTION ITALIC UNDERLINE BOLD FOREGROUND $FF0000 ... ;
Bitte beachten:
Dieser Hyperlink funktioniert nicht, wenn der Name des Tabellenblattes vom Inhaltsverzeichnis Leer- oder Sonderzeichen enthält. Dies gilt ebenso für alle Tabellenreferenzen zu Tabellen, welche auf Tabellenblätter liegen, deren Namen Leer- oder Sonderzeichen enthalten.
08.11.2019 (5.1.3.6): Neue Option zu OFFICECONTENTPAGE: SHOWSHEETNAME
Syntax:
OFFICECONTENTPAGE = | SHOWSHEETNAME : [ YES | NO ]; default: YES (in Übereinstimmung mit dem bisherigen verhalten)
Im bisherigen Standard für
OFFICECONTENTPAGE
wurde in die Liste der Sprungziele immer automatisch der Wechsel auf ein neues EXCEL-Sheet im Inhaltsverzeichnis mit einer eigenen Zeile vermerkt. Dies ist zum Beispiel dann nicht sinnvoll, wenn für jede Tabelle ein eigenes Sheet angelegt werden soll. Daher kann der automatische Wechsel mit dem Schalter ein- und ausgeschaltet werden. Dies ist ein globaler Schalter für das gesamte Inhaltsverzeichnis. Wenn es also ausgeschaltet wird, an anderer Stelle den Wechsel auf ein neues Sheet aber sichtbar werden soll, dann muss man den
SHEETNAME
mit dem
OFFICECONTENTPAGE INSERT
-Statement explizit angeben.
08.11.2019 (5.1.3.6): Neues Statement: OFFICECONTENTPAGE INSERT
Syntax:
OFFICECONTENTPAGE INSERT = { <addtitem> [ OFFICEFONT <officefont> ] }*n ; addtitem ::= [ LINE | CONTENTKEY | VARTEXT <variable> | VARTITLE <variable> | CITEFIRSTVAR [ XVALID | YVALID ] LITERAL <text> | TABLETITLE ]
Es wird hiermit beim OFFICE-EXPORT ermöglicht im Inhaltsverzeichnis weitere frei zu definierende Erläuterungen unterzubringen, die zwischen den Links zu den Tabellen stehen sollen. Welche das im Einzelnen sein können, hängt mit der Struktur des Tabellenbandes ab. Wenn zum Beispiel ein- und derselbe Fragentext für eine Reihe Statements gilt, ist es unter Umständen sinnvoll, diesen Fragentext auch im Inhaltsverzeichnis vor den Links zu den betreffenden Tabellen zu zitieren. So können beliebige Texte definiert werden, welche sich auf eine Reihe von Elementen der Tabelle beziehen:
LINE Leerzeile CONTENTKEY Zeile, die den CONTENTKEY enthält VARTEXT <variable> Zeile, die den Text einer beliebigen Variablen widergibt VARTITLE <variable> Zeile, mit dem VARTITLE einer beliebigen Variablen CITEFIRSTVAR [ XVALID | YVALID ] Fragentext der ersten Variablen in X- bzw. in Y-richtung LITERAL <text> Zeile mit einem beliebigen Text TABLETITLE Zeile mit dem TABLETITLE SHEETNAME Zeile mit dem Namen des SHEET, auf dem die folgende Tabelle erscheint.
Anmerkung:
Allen Elementen kann ein eigener Office-Font zugeordnet werden.
08.11.2019 (5.1.3.6): Neues Statement: MAKESINGLES
Syntax:
MAKESINGLES <newvarlist> [ = <sourcelist> ];
In der einfachsten Version ersetzt dieses Statement das
VARIABLES
-Statement:
MAKESINGLES f1 to f17;
Keine der Variablen aus der Bildungsvorschrift, im Beispiel “ f1 to f17”, darf existieren.
Anstelle des
";"
kann auch mit einem
"="
fortgefahren werden:
MAKESINGLES f1 to f17 = x18 to x34;
Es wird nach dem
"="
eine Variablenliste erwartet, die genauso viele Elemente enthält, wie sich aus der Bildungsvorschrift ergeben. Dann steht
MAKESINGLES
für eine Kombination aus
VARIABLES
und
COMPUTE COPY
.
Bitte beachten: wenn
MAKESINGLES
mit einer Sourcelist verwendet werden, werden intern durch
COMPUTE COPY
nur die numerischen Werte übertragen. Wenn eine Variable in der <sourcelist> die Eigenschaft
ALPHA
hat, ist das ein Syntaxfehler.
01.11.2019 (5.1.3.5): Funktionserweiterung OFFICEEXPORT: Option FLOWTEXT für LABELS X und LABELS Y
Syntax:
OFFICEXPORTOPTIONS EDIT = | FLOWTEXT LABELS X : [ YES | NO ] | FLOWTEXT LABELS Y : [ YES | NO ];
- Problem: Excel kennt kein Verfahren der darstellenden Software Hinweise zu übermitteln an welcher Stelle ein Wort sinnvoll getrennt werden soll. In der Folge kommt es dazu, dass beim Export in EXCEL oft keine sinnvolle Trennung von Wörtern erfolgt.
- Lösungsansatz: Wenn im Script nun die neue Option
FLOWTEXT
für die Boxtypen Labels X bzw. Labels Y eingeschaltet sind wird die Berechnung der Schriftbreite der Texte vorher ausgemessen. Trennungen werden so auch bei von PS/PDF abweichenden Fonts oder effektiven Spaltenbreiten berechnet.
- Anmerkung: Es gibt Situationen, in denen ein Textbestandteil gemessen an der Textbreite in eine Zelle gegebener Breite passt, Excel dies aber bei der Darstellung des Inhalts aber nicht so sieht. Diese Ungenauigkeiten variieren je nach Font, Fontgröße und Optionen wie BOLD oder ITALIC. Trotz eines ziemlich üppig bemessenen Sicherheitsabstandes kann eine verunglückte Darstellung nicht mit Sicherheit vermieden werden. Sollte der jetzt eingestellte Sicherheitsabstand nicht reichen, bittet GESS um Nachricht.
18.10.2019 (5.1.3.5): Neues Statement: OLDGROUPCLEARMETHOD
Syntax:
OLDGROUPCLEARMETHOD = [ YES | NO ];
Beim Clearen von SPSS-Files wird hiermit verhindert, dass die atomaren Variablen innerhalb von VARGROUPS nicht ungewünscht auf den gültigen Wert ‘0’ also Non-MISSING sondern auf MISSING gesetzt werden.
Zur zusätzlichen Sicherheit kann man mit dem Schalter die alte Löschmethode und die zusätzliche Löschung der atomaren Variablen aus dem SPSS-Reader reaktivieren. So werden die Einleseroutinen der einzelnen SPSS-READER vor dem Abfragen der Werte aus SPSS einen speziellen zusätzlichen Schritt einfügen, dass ALLE atomaren Variablen im Zweifel noch einmal auf MISSING gesetzt werden.
07.10.2019 (5.1.3.5): Neues Statement: INTERVALS
Syntax:
INTERVALS <newvar> = <sourcevar> { | <labeltext> : <comparison> <comparevalue> }*n; <comparison> :: [ LT | GT | LE | GE ]
- Mit INTERVALS wird bei der Gruppierung von Werten die Fehleranfälligkeit gegenüber des GROUPS-Statements bei nicht ganzzahligen Werten behoben.
- Daneben ist die Schreibweise weniger redundant und übersichtlicher.
Beispiel:
INTERVALS Interviewdauer = SEKUNDEN_GESAMT | "< 1 Minute" : LT 60 | "1 - 3 Minutes" : LT 180 | "5 - 10 Minutes" : LT 300 | "> 10 Minutes" : GE 600 ;
Anmerkung:
- Demgegenüber würde im folgenden GROUPS-Statement zum Beispiel 59.5s in keine der angeführten Kategorien fallen. Hier müsste man umständlich noch die Nachkommastellen einfügen. Die Fehler bei den Nachkommastellen gehören damit der Vergangenheit an.
GROUPS Interviewdauer = | "< 1 Minute" : [0 :59] in SEKUNDEN_GESAMT | "1 - 3 Minutes" : [60:179] in SEKUNDEN_GESAMT ;
30.09.2019 (5.1.3.5): Syntaxerweiterung für CHAPTER
Syntax:
CHAPTER <varlist> = [ {<string>}*n ];
- Das CHAPTER-Statement akzeptiert nun mehrere Kapitelbezeichnungen, um hierarchische Kapitelzuordnungen zu ermöglichen:
Beispiel:
CHAPTER sg.1.1 sg.10.1 sg.10.open = ["Hauptbefragung","Der Grid-Kram","SGQ"];
wird folgendermaßen in die JSON-Syntaxbeschreibung übertragen:
{ "varname": "mg.20.open", "chapter": [ "Hauptbefragung", "Der Grid-Kram", "MGQ" ], "label": { "1": "fgjhj", "2": "zwanzig", "3": "&&&" } },
28.08.2019 (5.1.3.5): Neue Funktion HTMLCHART
- In HTML ausgegebene Tabellen können nun um beliebig viele, einfache Diagramme (HTML-Charts) ergänzt werden.
Syntax:
HTMLCHART {<Optionen>} = <Zellbereich>;
- Die vollständige Dokumentation befindet sich unter ‘Tutorials und Handbücher’.
05.08.2019 (5.1.3.4): Funktionserweiterung für SUPPRESSEMPTYTABLE
- Bisher war
SUPPRESSEMPTYTABLE
ein globaler Schalter, dessen letzte Einstellung für den gesamten Tabellierlauf galt. - Nun ist
SUPPRESSEMPTYTABLE
eine tabellenspezifische Voreinstellung: sie wird an alle Tabellen weitergegeben, die im Anschluss formuliert werden, bis es eine neueSUPPRESSEMPTYTABLE
-Voreinstellung gibt. - Wird eine Tabelle aufgrund von
SUPPRESSEMPTYTABLE=YES
unterdrückt, wird dies in den Warnungen (gtc.wrn) protokolliert. - Bei
STRUCTURE
oderNO
hinterlässt die unterdrückte Tabelle eine Spur in den Ausgabedateien, dies wird nicht protokolliert. - Es ist möglich, dass eine mit
SUPPRESSEMPTYTABLE=STRUCTURE
unterdrückte Tabelle nicht als Struktur ausgegeben werden kann, z.B. wenn Variablen keine Labels enthalten. Sie wird dann wieSUPPRESSEMPTYTABLE=NO
behandelt.
17.07.2019 (5.1.3.3): Neues Statement: REPRINT TABLE
Syntax:
REPRINT TABLE = <tablename>;
- Eine bereits produzierte Tabelle kann an beliebiger späterer Stelle im Tabellenband wiederholt ausgegeben werden.
- Die Tabelleninhalte bleiben dabei erhalte — mit Ausnahme des
TABLETITLE
und derTABLENUMBER
. - Die Zellinhalte werden nicht neu ausgezählt, sondern es wird auf den bereits gezählten Inhalt der Quelltabelle zurückgegriffen.
- Die Tabelle wird allerdings neu gesetzt, ein absolut identische Aussehen ist also nicht garantiert.
- Die kopierte Tabelle enthält die meisten Informationen aus der Ursprungstabelle, jedoch nicht ausnahmslos:
-
TOPTEXT
undBOTTOMTEXT
bleiben erhalten, und damit auch automatisch eingefügte Filtertexte (siehe dieTEXT
-Optionen zuSETFILTER
,TABLEFILTER
undTABSELECT
). - Die Auswirkungen des Filters bzw. der Filter bleiben ohnehin erhalten, da die Daten der bereits ausgezählten und gedruckten Quelltabelle entnommen werden.
-
12.07.2019 (5.1.3.3): Neues CellElement: SUMSUMPERCENT
Syntax:
SUMSUMPERCENT ( var, basisvar )
- Kombination der zwei CellElements
SUM
undSUMPERCENT
in einem CellElement
13.06.2019 (5.1.3.3): Funktionserweiterung: GESSCHART
- Neue ChartOption:
TABLE <name>
- Die feste Bindung des
GESSCHART
-Statements an die davor stehende Tabelle ist (zumindest in Teilen) aufgehoben. - Man kann sich mit der zusätzlichen Option
TABLE
auf alle bestehenden Tabellen als Datenquelle beziehen. - Das ermöglicht auch den Bezug auf versteckte Tabellen.
Beispiel:
TABLE NAME tab1 = k BY f1; TABLE NAME tab2 HIDDEN( PS PDF ) = k BY f2; TABLE NAME tab3 = k BY f3; GESSCHART TABLE tab2 CHARTTITLE "chart zu hidden tab2" HORIZONTAL CHARTAREA 15 15 270 180 NEWPAGE = | FORM RECTANGLE COLUMNS 1:5 ROWS 1:2 DIRECTION FALLING | FORM RECTANGLE COLUMNS 1:5 ROWS 4:5 DIRECTION RISING ;
- Bei einer gemischten Ausgabe von Charts und Tabellen erscheint das Chart immer im Anschluss an die direkt davor stehende Tabelle: Das Chart ist an diese Tabelle gebunden (attached).
- Ein Chart hat bei Ausgabe in dieselbe PS/PDF-Datei immer zwei mögliche Bezüge zu Tabelle(n): die im Skript vorangegangene Tabelle (attached), aus der sich seine Position in der Ausgabedatei ableitet, und eine Tabelle, die die Datenquelle darstellt.
- Dies kann dieselbe Tabelle sein, dann ist es nicht notwendig, die Datenquelle mit der
TABLE
-Option im GESSCHART-Statement explizit zu benennen. - Gibt es im
GESSCHART
-Statement keineTABLE
-Komponente, ist die voranstehende Tabelle automatisch die Datenquelle. - Im obigen Beispiel steht das
GESSCHART
-Statement im Anschluss an die Tabelle tab3 (attached) und als Datenquelle ist explizit die Tabelle tab2 angegeben (TABLE tab2).
Anmerkung:
- Charts aus
GESSCHART
-Anweisungen, die direkt hinter einerHIDDEN
-Tabelle stehen, können NICHT ausgegeben werden, weil das Chart Bestandteil der Tabellenausgabe ist undHIDDEN
(PS oder PDF) die Ausgabe der Tabelle unterdrückt. - Da die Ursache dieser Nicht-Ausgabe sonst schwer vollziehbar ist, gilt diese Konstellation als Syntax-fehler 799: “GESSCHART attached to HIDDEN table, chart cannot be printed” und führt zu Programmabbruch.
04.06.2019 (5.1.3.3): Neues TableOption: HIDDEN
Syntax:
TABLE = ... HIDDEN( { <medium> }*n ) ... = A BY B ...; <medium> ::= PS | PDF | HTML | OFFICEEXPORT | INSTANTEXCEL;
- Als neuen Bestandteil der
TABLEOPTIONS
kann nun das “Verstecken” von Tabellen vom TypTABLE
,OVERVIEW
undXOVERVIEW
in definierten Ausgabemedien (PostScript, PDF, HTML usw.) eingestellt werden. - Es gibt Situationen, in denen man sich auf die Inhalte von Tabellen beziehen möchte, die nicht dargestellt werden sollen. Ein Beispiel hierfür ist die Vererbung einer Sortierreihenfolge, die einer Tabelle entnommen werden soll, die es zu diesem Zeitpunkt (noch) nicht gibt. Wenn etwa die Reihenfolge einer Reihe von zehn Tabellen nicht aus der ersten, sondern der zweiten Tabelle entnommen werden soll.
- Diese Anforderung kann man dadurch erfüllen, dass man die zweite Tabelle zweimal erzeugt: einmal
HIDDEN
vor der ersten, und dann sichtbar nach dieser:
TABLE NAME sortsource HIDDEN( PS PDF HTML OFFICEEXPORT INSTANTEXCEL ) = #k BY val2 SORT ABSOLUTE; TABLE SORT AS sortsource = #k by val1 ; TABLE SORT AS sortsource = #k by val2 ; TABLE SORT AS sortsource = #k by val3 ;
Anmerkung:
- Zwischen den Ausgabemedien herrscht eine Hierarchie. Es muss immer ein “
PRINTFILE PS
” oder “PRINTFILE PDF
” geben. - Alle Inhalte einer Tabelle werden für das
PRINTFILE
zusammengestellt. Alle anderen Ausgabeformen (wie HTML, OFFICEEXPORT, POWERCHART usw.) sind Abnehmer der internen Daten für dasPRINTFILE
. - Wird eine Tabelle für das
PRINTFILE
unsichtbar gemacht, werden die internen Daten genauso produziert wie im Standarfall. - Es wird allerdings die Ausgabe in PS/PDF unterdrückt. Diese Unterdrückung greift tief in die interne Verarbeitung der internen Klassen für die Generierung von PS/PDF ein. Auch versteckte ( PS/ PDF ) Tabellen existieren so intern mit allen Inhalten, diese sind also für alle abgeleiteten Ausgabeformen greifbar, also auch für POWERCHART.
Aktuelle Beschränkung:
- Zwar liegen die Inhalte auch für GESStabs Artist vor. Diese Charts sind aber strukturell Bestandteil der Tabellenausgabe und fallen deshalb gegenwärtig noch den Mechanismen zur Unterdrückung in PS bzw. PDF zum Opfer.
31.05.2019 (5.1.3.3): Neues Feature: TRUNCATEDECIMALS
Syntax:
TRUNCATEDECIMALS <varlist> = <number>; <number> = -9 .. 9;
- GESStabs zählt ja einfach alles, auch die Häufigkeiten beliebiger
FLOAT
-Werte. Das ist oft praktisch, kann aber auch lästig sein. - Bei Häufigkeitszählungen über kontinuierliche Variablen kommt es vor, dass mehrfach derselbe gerundete Wert mit ggf. unterschiedlichen Häufigkeiten dargestellt wird, wobei die genau ausgezählten Werte infolge der Rundung bei der Ausgabe gar nicht mehr ersichtlich sind.
- Die interne Zählung ist dann differenzierter als die Ergebnisausgabe: Bspw. würden bei einer Darstellung mit einer Nachkommastelle die Werte 0,0238, 0,0278, 0,0385, 0,0417, 0,0426, 0,0435 und 0,0455 alle auf 0,0 gerundet, in der Tabelle stünde dann siebenmal der Wert 0,0 mit der Häufigkeit 1.
- Um diese Diskrepanz zwischen der internen Genauigkeit und der gerundeten Darstellung zu beseitigen, kann anstelle von
SETDECIMALS
das neue SchlüsselwortTRUNCATEDECIMALS
verwendet werden. - In der Folge wird während des Zählens die zu zählende Variable auf den passenden Ausgabewert gerundet.
- Im oben angeführten Beispiel stünde dann der Zahlenwert 0,0 mit der absoluten Häufigkeit 7.
- Stellt man mit einer solchen Variablen weitere Berechnungen an, ist es natürlich nicht wünschenswert, dass der ungenauere gerundete Wert in diese eingeht — im obenstehenden Beispiel ist 0,0417 eben nicht gleich 0,0 wie in der Tabellenausgabe.
- TRUNCATEDECIMALS verändert die Variableninhalte nicht dauerhaft, sondern nur im Zählvorgang in
CODEBOOK
undTABLE
. In angeforderte Statistiken wieMEAN
oderVARIANCE
geht der ungerundete Wert ein.
Beispiel: Negative
<number>
-Werte verschieben das Dezimalkomma nach links.
- Rundung auf 100er:
TRUNCATEDECIMALS <varlist> = -2;
Anmerkung:
- Es wird empfohlen,
SETDECIMALS
undTRUNCATEDECIMALS
nicht gemeinsam auf eine variable anzuwenden. - Ein Teil der statistischen Kennzahlen wie
MEDIAN
oder Perzentile geht auch auf Häufigkeitsauszählungen zurück. Diese sind zwar intern und nicht störend für den Tabellenleser, bei sehr großen Fallzahlen und hoher interner Differenzierung der Daten kann dies in der Performance spürbar werden. An diesen Stellen greiftTRUNCATEDECIMALS
aber nicht ein.
31.05.2019/ 07.06.2019 (5.1.3.3): Neues Schlüsselwort: ALPHACASESENSITIVE
Syntax:
ALPHACASESENSITIVE = [ YES | NO | UPPERCASE | LOWERCASE ];
- Default: NO
- Im Standardfall werden die Inhalte von Alpha-Variablen ‘case-insensitiv’ verglichen.
- Daraus folgt, dass z.B. ‘Ja’, ‘ja’ und ‘JA’ als inhaltsgleich betrachtet und behandelt werden.
- Die Schreibweise inhaltsgleicher Strings richtet GESStabs nach der Schreibweise der zuerst aufgetretenen Zeichenfolge.
- Mit
UPPERCASE
bzw.LOWERCASE
kann die Darstellung zusammengefasster Strings vereinheitlicht werden: in Klein- oder Großschreibung. -
ALPHACASESENSITIVE = YES;
bewirkt, dass nur identische Strings als inhaltsgleich interpretiert: ‘Ja’, ‘ja’ und ‘JA’ sind dann unterschiedliche Inhalte. - Dies beeinflusst das Verhalten des Einlesens von
DATAFILE
,CSVINFILE
undSPSSINFILE
ebenso wie die Ergebnisse von bspw.COMPUTE CONCAT
. - Die Einstellung gilt für alle Alpha-Variablen des gesamten Laufs.
29.04.2019 (5.1.3.1): Neues Tabelformat: NOXVARTITLEBOX
Syntax:
TABLEFORMAT = +/- NOXVARTITLEBOX;
- Unterdrückt die Ausgabe des Variablennamens/ Vartitels für den Tabellenkopf.
- Analog zu
NOVARTITLEBOX
(Y‑achse der Tabelle)
26.04.2019: Neues Feature: ALPHAFAMILY
Syntax:
ALPHAFAMILY <neueAlphaFamily> = { <alphavar> }*n;
- Mit
ALPHAFAMILY
kann aus atomaren Variablen vom TypALPHA
eine Varfamily vom TypALPHA
erzeugt werden. - Damit lassen sich offene Fragen, für die in der Befragung mehrere Eingabefelder vorgesehen sind (1. Nennung, 2. Nennung, u.s.w.), leicht zusammengefasst in einer Tabelle auswerten.
- Wenn die zu bildende Variable bereits existiert, ist dies ein Syntaxfehler; ebenso, wenn eine der atomaren Variablen nicht vom Typ
ALPHA
ist. -
EVALFAMVALONCE
ist als Default aufYES
gesetzt, d.h. wenn ein String in mehr als einer Variablen vorkommt, aus denen die ALPHAFAMILY erzeugt wird, wird er nur einmal ausgewertet, mitNO
kann man dieses Verhalten ändern. - Die
ALPHAFAMILY
verhält sich in Bezug zuEVALFAMVALONCE
wie jede andereMULTIQ
. - Mit der
ALPHAFAMILY
kann man wie mit einerVARFAMILY
Tabellen erzeugen. -
COMPUTE SUBSTR
undCOMPUTE CONCAT
sind nicht anwendbar, auch Textvergleiche (IN
,EQ
,GE
etc. beiALPHAVAR
) sind nicht zulässig. - Möchte man testen, ob eine bestimmte Zeichenfolge in einer der
ALPHAVARS
vorkommt, so muss man entweder die atomaren Elemente testen (AND
/OR
-verknüpft) oder mitCOMPUTE CONCAT
eine aus denALPHAVARS
zusammensetzteALPHAVAR
erzeugen und testen, ob der Begriff in dieser vorkommt.
Zum Schluss noch eine Warnung:
- Die atomaren
ALPHAVARS
dürfen nur in je einerALPHAFAMILY
enthalten sein. - Die folgenden Anweisungen erzeugen Unsinn, da ’nenn1’ und ’nenn2’ in zwei verschiedenen
ALPHAFAMILY
s auftauchen:
ALPHAFAMILY alleNennungen = nenn1 nenn2 nenn3 nenn4; ALPHAFAMILY Nennung1und2 = nenn1 nenn2;
26.04.2019: Neues Feature: COMPUTE SUBSTR
Syntax:
COMPUTE SUBSTR [ <lettercase> ] <Zielvariable> = <Quellvariable> <start> <len>; <lettercase> ::= [ LOWERCASE | UPPERCASE ]
- Mit
COMPUTE SUBSTR
wird ein Substring der Länge <len>, ab der Position <start> kopiert. - Das Ergebnis kann kürzer sein als <len> und ggf. die Länge null haben.
- Ein leerer String einer Alpha-Variable ist
MISSING
. - <Quellvariable> muss eine atomare Variable sein. Ob es sich um Alpha-Variable handelt, ist unerheblich: Für alle Variablen wird der Text des Labels verwendet, der dem aktuellen Wert entspricht.
- Gibt es zum gegenwärtigen Wert einer existierenden Variablen kein Label (kann bei Alpha-Variablen nicht der Fall sein), wird ein leerer String (also MISSING) zurück gegeben.
- Man kann außerdem bestimmen, dass das Ergebnis in Groß- (
UPPERCASE
) oder Kleinbuchstaben (LOWERCASE
) gewandelt werden soll, um z.B. Fateinamen (für unix definiert) in Kleinbuchstaben zu verwenden. - Wird keine der beiden Optionen verlangt, wird der Text unverändert (d.h. wie in den Ausgangsvariablen) verwendet.
- Wenn die <Zielvariable> existiert, muss sie vom Typ
ALPHA
sein. Existiert sie nicht, wird eine neue Alpha-Variable generiert.
Beispiel:
COMPUTE SUBSTR part = neuevar 1 20;
-
SUBSTR
kann auch alsCOMPUTE
-Spezifikation inIF
-Statements und derenELSE
-Komponente verwendet werden.
Beispiel:
IF [ 2 3 ] IN x7 THEN SUBSTR part = neue 1 20 ELSE SUBSTR part = neue 1 10;
26.04.2019: Neues Feature: COMPUTE CONCAT
Syntax:
COMPUTE CONCAT [ <lettercase> ] <alphavar> = { <elem> }*n; <lettercase> ::= [ LOWERCASE | UPPERCASE ] <elem> ::= { "<beliebiger text>" | VARIABLE }
- Mit
COMPUTE CONCAT
können die Labels beliebig vieler atomarer Variable mit Textkonstanten zusammengefügt, d.h. verkettet, werden. - Die Variablen als Argumente müssen atomare Variablen sein.
- Ob es sich um Alpha-Variablen handelt, ist dabei unerheblich. Für alle Variablen wird der Text des Labels verwendet, der dem aktuellen Wert entspricht.
Beispiel:
COMPUTE CONCAT neuevar = "aktuelles Label von Variable Q1 " q1 " und aktuelles Label von Variable Q2 " q2;
- Wenn eine Variable nicht existiert, wird der eingesetzt Name als Textkonstante verwendet.
- Gibt es zum gegenwärtigen Wert einer existierenden Variablen kein Label (kann bei aplha-Variablen nicht der Fall sein), wird ein leerer String verwendet.
- Man kann außerdem bestimmen, dass das Ergebnis in Groß- (
UPPERCASE
) oder Kleinbuchstaben (LOWERCASE
) gewandelt werden soll, um z.b. Dateinamen (für unix definiert) in Kleinbuchstaben zu verwenden. - In solchen Fällen wird man das Statement oft in “degenerierter” Form verwenden, z.B.:
COMPUTE CONCAT LOWERCASE unixfilename = anyalpha;
-
CONCAT
kann auch alsCOMPUTE
-Spezifikation inIF
-Statements und derenELSE
-Komponente verwendet werden.
Beispiel:
IF [ 2 3 ] IN x7 THEN CONCAT neue = 'aa' '-' 'bb' '-' xx1 '-' x5 ELSE CONCAT neue = 'xx' '-' 'yy' '-' xx1 '-' x5;
- Übersichtlicher ist oft die Verwendung von
IFBLOCK
/ELSEBLOCK
/ENDBLOCK
anstelle vonIF
/ELSE
:
IFBLOCK [ 2 3 ] IN x7 THEN COMPUTE CONCAT neue = 'aa' '-' 'bb' '-' xx1 '-' x5; COMPUTE SUBSTR PART = neue 1 20; ELSEBLOCK COMPUTE CONCAT neue = 'xx' '-' 'yy' '-' xx1 '-' x5; COMPUTE SUBSTR part = neue 1 10; ENDBLOCK;
26.04.2019: Neuer Vergleichsoperator ‘IN’ für Alpha-Vergleiche
Syntax:
IF <alpha> IN <alphavar> THEN .... <alpha> ::= Textkonstante oder Alpha-Variable <alphavar> ::= Alpha-Variable
- In der einfachen Variante wird getestet, ob ein beliebiger Text in einem Alpha-Wert vorkommt.
- V1 sei eine Variable vom Typ Alpha, dann kann man mit ‘IN’ testen, ob eine Textkonstante (z.b. ‘abc’) in dieser Variable enthalten ist:
IF "abc" IN V1 THEN...
- Man kann auch prüfen, ob der Text einer Alpha-Variablen im Text einer anderen Variable enthalten ist: V1 und V2 seien beides variablen vom Typ Alpha, dann kann man mit darauf testen, ob der Alpha-Inhalt von V2 Bestandteil von V1 ist:
IF V2 IN V1 THEN...
- Es gibt auch einen “Wildcard”-Vergleich: Enthält die Textkonstante auf der linken Seite des Vergleichs ein ‘*’ oder ein ‘?’, dann wird ein Pattern-Vergleich durchgeführt.
- Jedes ‘?’ steht für einen beliebigen Buchstaben, ‘*’ für mehrere.
IF "a?c.txt" IN V1 THEN...
- Das letzte Beispiel würde entsprechend ‘true’ liefern für: a1c.txt, a2c.txt, abc.txt usw.
- Diese Form des Vergleichs gibt es nur bei Textkonstanten; wenn auf der linken Seite des Vergleichsoperators eine numerische Variable steht, dann wird KEIN Pattern-Vergleich durchgeführt — auch nicht, wenn deren Text ein ‘*’ oder ‘?’ enthält.
23.04.2019: Neues Schlüsselwort: IGNORECASEINCOMPARE
Syntax:
IGNORECASEINCOMPARE = [ YES | NO ];
- Alle Textvergleiche (EQ,
NE
,LE
,GE
,LT
,GT
undIN
) unter Bbeteiligung von Stringkonstanten und/oder Alpha-Variablen werden im Standardfall case-sensitive durchgeführt, d.h. “abc” ist unterschiedlich zu “ABC” oder “Abc” usw. - Setzt man den Schalter
IGNORECASEINCOMPARE
aufYES
, werden die Vergleiche durchgeführt, ohne dass zwischen Klein- und Großbuchstaben unterschieden wird. Hierfür werden alle Labeltexte vor dem Vergleich in Kleinbuchstaben gewandelt. - Grundsätzlich sollten auch Zeichen außerhalb des ASCII-Codessets, wie z.b. ä und Ä oder é und É richtig zugeordnet werden.
- Da dies aber vom lokalen Setting des Betriebssystems abhängt, wird zur Vorsicht bei der Verwendung geraten. Deutsche Umlaute sind wohl OK, aber bei
bspw. griechischen, hebräischen oder osteuropäischen Sonderzeichen ist Kontrolle angebracht.
01.04.2019: Neues Feature von CLONEVAR: Löschen von Labels mittels DELETELABELS
Syntax:
CLONEVAR = [ DELETELABELS [ MISSING | AUTONOANSWER | OVERCODE | {}*n ] ];
- Mehrere Variablen, die denselben Sachverhalt abbilden, werden bei der Tabellierung oft mit leichten Modifikationen benötigt.
- Ein häufiges Beispiel hierfür ist die Verwendung im Header und in der Vorspalte von Tabellen:
MISSING-values
,AUTONOANSWER
oderOVERCODE
sollen zwar i.d.r. bei der Anzeige in der Vorspalte erscheinen, nicht aber im Tabellenkopf. - Der Klon soll sich also manchmal doch vom Original unterscheiden.
- Mit der Option
DELETELABELS
kann man einzelne Labels gezielt über ihren Code löschen oder anhand ihrer EigenschaftenMISSING
,AUTONOANSWER
undOVERCODE
.
Beispiel:
CLONEVAR f3_header = f3 DELETELABELS MISSING AUTONOANSWER OVERCODE; FORHEADER f3_header = YES; FORCOUNTS f3 = YES;
-
DELETELABELS
ist wörtlich zu nehmen: es werden nur die Labels gelöscht, die Werte der Variablen werden nicht modifiziert. - Damit die bearbeiteten Variablen nicht ohne Labels wieder erscheinen, ist es ratsam, die Einstellung
GLOBALPRINTALL
aufNO
zu setzen.
18.03.2019: Funktionserweiterung für SUPPRESSEMPTYTABLE: STRUCTURE
Syntax:
SUPPRESSEMPTYTABLE = [ NO | YES | STRUCTURE ];
-
SUPPRESSEMPTYTABLE
ist ein globaler Schalter, der für den gesamten Lauf gilt. - In für Endkunden bestimmten Läufen wird er gewöhnlich auf
YES
gesetzt; leere Tabellen werden dann nicht ausgewiesen. -
NO
führt zur Ausgabe einer Tabellenseite ohne Inhalt mit einem konfigurierbaren Text, der mitteilt, dass keine gültigen Fälle vorhanden sind. - Die neue Option
STRUCTURE
gibt die Struktur von Tabellen vom TypTABLE
aus, d.h. alle Zellen werden mit Besetzung n=0 ausgegeben. - Entsprechende Informationen liegen für Tabellen vom Typ
CODEBOOK
nicht vor. -
STRUCTURE
wird so interpretiert, dass leere Tabellen in der Ausgabe kenntlich gemacht werden sollen, es erscheint an dieser Stelle dann derEMPTYTABLETEXT
. - Unabhängig von der Stellung von
SUPPRESSEMPTYTABLE
wird jede leere Tabelle in den Messages (gtc.msg) protokolliert.
13.03.2019: Neues Feature: CLONEVAR
Syntax:
CLONEVAR <destinationvar> = <sourcevar>;
- Erzeugt einen Klon zur <sourcevar>, der denselben Variablentyp und auch dieselbe Anzahl möglicher Nennungen hat.
- Dieser Klon erbt
TEXT
,VARTITLE
, dieMISSING values
,MISSING
…RANG
E und ggf. die EigenschaftenAUTONOANSWER
,EVALFAMVALONCE
undGROUPCOUNTS
; auch variablenbezogene Angaben zu Dezimalstellen (DECIMALS
,SETDECIMALS
) werden übertragen. - Die Labels werden kopiert, das umfasst auch die
OVERCODES
und LabelPoperties, wie z.B.USEFONT
,LEVEL
,SORTCLASS
,NEWPAGE
undRECODE
, analog zuLABELS COPY
. - Außerdem wird intern eine
COMPUTE COPY
-Anweisung (COMPUTE COPY <destinationvar> = <sourcevar>;
) generiert, die während des Einlesens alle Werte jeden Falls überträgt.
Voraussetzungen:
- Es darf noch keine Variable mit dem Namen der <destinationvar> existieren.
- <sourcevar> muss existieren und muss eine atomare Variable (
SingleQ
) oder eine Mehrfachnennungsvariable (MultiQ
,DichoQ
) sein. - Variablen vom Typ
Alpha
,OpenQ
,AssocVar
wie auch andere spezielle Variablen (z.B.IndexVar
) können nicht geklont werden, der Versuch führt zu einem Syntaxfehler. - Nicht übertragen werden:
-
EXCLUDEVALUES
undRESTRICTVALUES
- Varkeys (z.b.
SingleQ Key
…) - Filter (
SETFILTER
/ENDFILTER
,FILTER
)
-
14.02.2019: Neues Statement: MULTIFROMSTRING
- Umwandeln von Alpha-Variablen in
FAMILYVARS
Syntax:
MULTIFROMSTRING [ DELIMITED <delimiter> ] [ DECIMALS <decimalchar> ] <newvar> = <alfavar>;
- Defaults:
DELIMITED: ','
undDECIMALS: '.'
- Zunehmend sind Variablen mit Mehrfachnennungen oder offene Fragen in Datensätzen als Strings abgelegt.
- Um diese in GESStabs effizient zu verarbeiten, gibt es jetzt das neue Statement
MULTIFROMSTRING.
- <newvar> und <alfavar> müssen existierende Variablen sein, <newvar> muss eine
FAMILYVAR
sein. <alfavar> kann auch eine numerische Variable sein. - Entscheidend ist nur, dass es für den gegenwärtigen Code ein Label gibt, das sich numerisch interpretieren lässt.
- Es werden soviele Codes in <newvar> abgelegt, wie in dem Labelstring erkannt werden. (Trivialerweise natürlich nur soviele Werte, wie die
FAMILYVAR
aufnehmen kann.) - Existiert das Label zum gegenwärtigen Code nicht, oder enthält es keine als Zahlen interpretierbare Substrings, ist die resultierende Variable
MISSING
. - Wenn z.b. eine Alpha-variable f3_alpha in einem SPSS-Datensatz den String “3,6,18” enthält, ist eigentlich eine Mehrfachnennungsvariable mit den Werten 3, 16 und 18 “gemeint”.
Beispiel:
MAKEFAMILY f3 = 10; MULTIFROMSTRING f3 = f3_alpha;
Mit der Sequenz kann man das Label “3,6,18” in eine GESStabs-konforme
MultiQ
umwandeln. (Die Werte von Alpha-Variablen werden intern in
VALUELABELS
gespeichert.)
- Anmerkung: Ein Datumsstring in der Form “TT-MM-JJJJ” kann auf diese Weise in eine
MultiQ
mit drei Werten gewandelt werden.
Beispiel:
MAKEFAMILY datum1 = 3; EVALFAMVALONCE datum1 = no; MULTIFROMSTRING DELIMITED "-" datum1 = datestring; Die Verwendung vonEVALFAMVALONCE
an dieser Stelle ist notwendig, da sonst z.b. "01-01-01" in eineMultiQ
mit nur einer Nennung "1" ausgepackt würde.
17.12.2018: Neues Schlüsselwort: OVEROVERCODE
- Neues Schlüsselwort in
Valuelabels
- Bestimmung: Ein
OVEROVERCODE
ist einOVERCODE
, der nur ausOVERCODE
s und ggf.OVEROVERCODE
s zusammengesetzt ist - Voraussetzung für die Nutzung: Alle
OVERCODE
s undOVEROVERCODE
s innerhalb derVALUELABELS
haben eindeutigen Namen. - Syntax: Zuweisung von Namen zu
OVERCODE
s durch Ausschreiben des Namens direkt hinter das SchlüsselwortOVERCODE
(bzw.OVEROVERCODE
) - Mehrfach verwendete Namen werden erkannt und führen zu einem Syntaxfehler.
- Die leitende Idee bei der Verwendung von
OVEROVERCODE
ist, Codes in einer Labelliste nur einmal als Referenz in einemOVERCODE
zu verwenden.
Beispiel:
LABELS SORTTESTX = 1 eins 2 zwei OVERCODE OC1 1:2 "erster OC" 3 drei 4 vier 5 fünf OVERCODE OC2 3:5 "zweiter OC" 6 sechs 7 sieben OVERCODE OC3 6 7 "dritter OC" 8 acht 9 neun 10 zehn OVERCODE OC4 8 9 10 "vierter OC" OVEROVERCODE OOC1 :OC3 :OC2 "erster OOC" OVEROVERCODE OOC2 :OC4 :OC1 "zweiter OOC" OVEROVERCODE OOOC1 :OOC1 :OOC2 "erster OOOC" ;
- Die Namen ‘OC1’, ‘OC2’… und ‘OOC1’ bzw. ‘OOOC1’ wurden hier nur der Einfachheit halber gewählt, selbstverständlich können hierfür auch inhaltlich definierte Namen verwendet werden.
- Zusätzliche Regeln zur Reihenfolge:
OVEROVERCODE
s können nur ausOVERCODE
s gebildet werden, die bereits existieren, also die weiter oben im Skript erzeugt wurden und einen eindeutigen Namen tragen. - Weniger strenge Regeln für die Platzierung der atomaren Codes: Codes können (wie bisher) auch dann
OVERCODE
s zugeordnet werden, wenn sie noch nicht definiert sind.
Beispiel einer syntaktisch korrekten Labelliste:
labels sorttestxx = overcode OC1 1:2 "erster OC" overcode OC2 3:5 "zweiter OC" overcode OC3 6 7 "dritter OC" overcode OC4 8 9 10 "vierter OC" overovercode OOC1 :OC3 :OC2 "erster OOC" overovercode OOC2 :OC4 :OC1 "zweiter OOC" overovercode OOOC1 :OOC1 :OOC2 "erster OOOC" 1 eins 2 zwei 3 drei 4 vier 5 fünf 6 sechs 7 sieben 8 acht 9 neun 10 zehn ;
04.09.2018: Neues Datensatzformat: Invertierte Datensätze
- Als neues proprietäres Dateiformat kann GESStabs nun invertierte Datensätze schreiben und lesen.
- Vorteil: wesentlich kürzere Verarbeitungszeiten bei Datensätzen mit hoher Fall- und geringer Variablenzahl
- Daten werden variablenweise in Blöcken angeordnet.
- Invertierte Datensätze enthalten ausschließlich numerische Werte. Variablenbeschreibungen müssen via
SYNTAX
herausgeschrieben und in einer Textdatei übergeben werden. Alpha-Variablen werden systematisch umgeformt.
Syntax:
- Herausschreiben eines invertierten Datensatzes:
INVERTOUT = "<filename/-path>";
- Einlesen eines invertierten Datensatzes:
INVERTIN = "<filename/-path>";
- Ein Tutorial mit allen Optionen steht unter ‘Tutorials und Handbücher’ zum Download bereit.
06.08.2018: Neues Statement: CONFIDENCERANGEPVALUE
Syntax:
CONFIDENCERANGEPVALUE = [ SIGNIF68 | SIGNIF90 | SIGNIF95 | SIGNIF99 | SIGNIF999 ];
- Im Standardfall (ohne explizite Setzung von
CONFIDENCERANGEPVALUE
) wird das Konfidenzintervall näherungsweise für einen p‑Wert von 0.05 berechnet. - Dieser p‑Wert kann jetzt mit dem
CONFIDENCERANGEPVALUE
-Statement neu gesetzt werden. - Nach Setzung eines expliziten p‑Wertes wird das Intervall exakt berechnet.
15.06.2018: Neues statement: EMPTYTABLETEXT
Syntax:
EMPTYTABLETEXT = [ "text" | NO ];
- Im Normalfall werden leere Tabellen (in die keine Fälle geflossen sind) unterdrückt.
- Bei Setzung von
SUPPRESSEMPTYTABLE = NO;
wird eine Tabellenseite ausgegeben, die den Standardtext “Empty table” und Angaben über die Syntax der Tabelle enthält (welche Variablen in die X- bzw. y‑Achse der Tabelle eingingen). - Mit der neuen Option
EMPTYTABLETEXT
kann stattdessen ein spezifischer Text ausgeben werden. -
EMPTYTABLETEXT
setzt eine Voreinstellung, die für alle folgenden Tabellen gilt. - Selbstverständliche kann vor jeder Tabelle ein neuer Text definiert werden.
- Soll der ursprüngliche Zustand (ohne spezifische Einstellung für leere Tabellen) wieder hergestellt werden, erreicht man dies mit
EMPTYTABLETEXT = NO;
.
22.05.2018: TRANSLATE: Neue Option für OFFICEXPORTOPTIONS
-
-
- in Zusammenhang mit
USEPOSTSCRIPTFONT
- in Zusammenhang mit
-
Syntax:
OFFICEXPORTOPTIONS = .... | TRANSLATE <postcriptfontname> : <excelfontname> [ OPTION { BOLD | ITALIC | UNDERLINE } ] ....
- In vielen Fällen ist es hinreichend, dass GESStabs den Namen des PostScript-Fonts in das erzeugte Excel- bzw. LibreOffice-Dokument einträgt — insbesondere, wenn diese Fonts im System installiert sind.
- Über das optische Resultat entscheidet aber das Windows-System auf dem Rechner des Betrachters, welcher Font als angemessene Ersetzung gilt.
- Das unerfeuliche Resultat kann sein, dass der Erzeuger des Dokuments sinnvolle Font-Ersetzungen sieht, das Ergebnis beim Kunden aber anders aussieht.
- Mit der
TRANSLATE
-Option zuOFFICEXPORTOPTIONS
kann man genau festsetzen, welche Systemfonts die PostScript-Fonts ersetzen sollen.
Beispiel:
OFFICEXPORTOPTIONS EDIT = | TRANSLATE "Helvetica" : "Arial" | TRANSLATE "Helvetica-Bold" : "Arial" OPTION BOLD | TRANSLATE "Helvetica-BoldOblique" : "Arial" OPTION ITALIC BOLD | TRANSLATE "Helvetica-Oblique" : "Arial" OPTION ITALIC ;
- Hierbei ist zu beachten, dass verschiedene Schnitte eines Fonts (wie BOLD oder ITALIC) im PostScript-Font-Modell einen weiteren fFont darstellen, während die Schnitte in den Font-Modellen der meisten graphischen Benutzeroberflächen als Eigenschaften (
OPTION
) des Fonts angegeben werden. - Um die Schrift ‘Arial’ in den Schnitten ’standard’, ‘bold’, ‘italic’ oder ‘bolditalic’ zu verwenden, müssen für vier verschiedene PostScript-Fontnamen eine Übersetzng definiert werden.
- Spezialfall: Ein Abobe-Font soll während eines Tabellier-Jobs in mehrere unterschiedlich Systemfonts überetzt werden. Verwendet man
OFFICEXPORTOPTIONS EDIT
, so gilt die letzte Setzung einer Fontübersetzung auch für davor angeforderte Tabellen. D.h. beiEDIT
gewinnt immer die letzte Änderung. Ist es notwendig, unterschiedliche Fontübersetzungen in einem Lauf zu verwenden, müssen dieOFFICEXPORTOPTIONS
(ohne Verwendung vonEDIT
) insgesamt neu gesetzt werden.
24.04.2018: SORTCODEOVERCODE: neues TABLEFORMAT zur sortierung
Syntax:
TABLEFORMAT = +/- SORTCODEOVERCODE;
- Eine alternative Methode zur Sortierung von Labellisten mit
OVERCODE
- Sortiert werden alle Labels, einfache Labels und Overcode-Labels, anhand des Kriteriums.
- Codes, die zu einem Overcode gehören, werden im Anschluss an diesen Overcode ausgegeben.
- Diese Option ist auf Sortierungen nach
ABSOLUTE
undMEAN
beschränkt. - Zu
MEAN
gehören auch alle Zellelemente, bei denen zusätzlich zumMEAN
Signifikanzen ausgegeben werden, wie z.b.MEANTEST
,HYMEANTEST
etc. -
SORTCODEOVERCODE
undAUTOOVERCODE
schließen sich aus. Eine Tabelle, die diese beiden Tabellenformate enthält, ist ein syntaktischer Fehler.
03.04.2018: Neues Statement: INVALIDRESULTS
Syntax:
INVALIDRESULT <cellelement> = <string>;
Existiert für
Cellelement
kein Ergebnis (z.b. keine Signifikanz des Unterschieds zu einer anderen Spalte oder 0 Werte für einen Mittelwert), kann für diesen Fall ein Ausgabestring definiert werden.
15.03.2018: Neue Optionen für OFFICEXPORTOPTIONS
1.
CONTENTPAGE
Syntax:
.... | CONTENTPAGE : <name of worksheet> ....
- Wenn diese Option gesetzt ist, wird als erstes Worksheet eine Seite mit Inhaltsangaben eingefügt.
- Dies setzt voraus, dass die Tabellen in mindestens einem explizit benannten Worksheet stehen.
- Mindestens eine
CHAPTERTITLE
-Anweisung muss also im Skript vorder ersten Tabellen-Anforderung stehen. - Ist ein
CONTENTKEY
der Tabelle bekannt, wird dieser verwendet. - Ist das nicht der Fall, wird der
TABLETITLE
verwendet. - Ist auch dieser nicht bekannt, wird der Text “unkown content” ausgegeben.
- Ein Wort zur Warnung: Damit man die Hyperlink-Funktion des Inhaltverzeichnisses nutzen kann, sollte man in den Beschriftungen der Worksheets (
CHAPTERTITLE
) keine Sonderzeichen wie Umlaute etc. verwenden. Diese werden zwar als Laschentexte korrekt dargestellt, die Hypertext-Funktion scheitert daran aber (“Bezug ungültig”).
2.
INHERITFONT
Syntax:
.... | INHERITFONT <boxtype> : [ YES | NO ] ....
- Auf besonderen Wunsch eines Nutzers
- Das Schlüsselwort
INHERITFONT
hat in diesem Kontext die Bedeutung: Verwende den (vererbten) Font vom PS/PDF-Printfile. - Die verschiedenen syntaktischen Möglichkeiten der Font-Bestimmung werden in folgender Priorität abgearbeitet:
- Wenn
ELEMENTFONT
explizit gesetzt ist, gilt dieser. - Sonst wenn
BOXFONT
explizit gesetzt ist, gilt dieser. - Sonst, wenn
INHERITFONT
aufYES
gesetzt ist, wird der Fontname aus PS/PDF verwendet. - Ist dies alles nicht der Fall, wird an Excel/Libre Office kein Font übergeben und es gilt der Office-Standardfont.
- Wenn
12.03.2018: Neue Option: OFFICECHARTDEFAULTS
- Voreinstellungen für
OFFICECHART
- Hinweis: Die Syntax von
OFFICECHARTDEFAULTS
undOFFICECHART
ist jetzt an die Schreibweise vonOFFICEEXPORTOPTIONS
angepasst.
Syntax:
OFFICECHARTDEFAULTS = [ | AUTO : [ YES | NO ] ] [ | CHARTTITLE : <title> ] [ | INVERSE : [ YES | NO ] ] [ | USE3D : [ YES | NO ] ] [ | SIZE : <width> <height> ] [ | FORM : [ BARS | COLUMNS | LINES | PIE ] [ | OPTION : [ CLUSTERED | STACKED | PERCENTSTACKED ] [ | LEGENDPOSITION : [ TOP BOTTOM LEFT RIGHT ] ] [ | BACKGROUND : <colorvalue> ] [ | FRAMECOLOR : <colorvalue> ] [ | COLUMNS <number> : <number> ] [ | ROWS <number> : <number> ] [ | LABELS : [ 0 | 1 | 2 ] ] ;
- Geleitet von der Vermutung, dass
OFFICECHART
häufig benutzt wird, ähnliche Charts für (fast) alle Tabellen in einemOFFICEEXPORT
zu erstellen, gibt es die syntaktische Möglichkeit, für die Parameter vonOFFICECHART
Defaults zu definieren. - Sollen alle Tabellen verchartet werden, dann genügt ein
OFFICECHARTDEFAULTS
-Statement mit| AUTO : YES
. - Bei mehrfachem Aufruf von
OFFICECHARTDEFAULTS
gilt immer die letzte Version; es gibt keine Variante, einzelne Parameter zu modifizieren. -
OFFICECHARTDEFAULTS = ;
löscht alle Voreinstellungen. - Ist
AUTO
gesetzt, wird an jede Tabelle, die in der Folge definiert wird, automatisch ein Chart angehängt, dessen Parameter denOFFICECHARTDEFAULTS
entnommen werden. - Hier ein Beispiel, in dem 10 Excelsheets mit einer Tabelle und einem Pie-Diagramm erzeugt werden:
OfficechartDefaults = | auto : yes | ChartTitle : "Total" | inverse : no | legendposition : right | form : pie | background : $EEFFFF | size : 500 400 | use3d : yes | columns 1:1 ; dummyhead = ttl labels 1 "Total"; #macro #tab( &1 ) chaptertitle = y&1; tabletitle = "Variable y&1"; table = ttl axx by y&1; #endmacro #domacro ( tab 1:10 )
- Natürlich können an die Tabellen mit Auto-generierten Charts weitere Charts angehängt werden.
12.03.2018: Neues Feature: OFFICECHART
- Diagramm-Darstellung von Tabellen in
OFFICEEXPORT
Syntax:
OFFICECHART = [ | CHARTTITLE : <title> ] [ | INVERSE : [ YES | NO ] ] [ | USE3D : [ YES | NO ] ] [ | SIZE : <width> <height> ] [ | FORM : [ BARS | COLUMNS | LINES | PIE ] [ | OPTION : [ CLUSTERED | STACKED | PERCENTSTACKED ] [ | LEGENDPOSITION : [ TOP BOTTOM LEFT RIGHT ] ] [ | BACKGROUND : <colorvalue> ] [ | FRAMECOLOR : <colorvalue> ] [ | COLUMNS <number> : <number> ] [ | ROWS <number> : <number> ] [ | LABELS : [ 0 | 1 | 2 ] ] ;
- Die Syntax ist identisch mit der des
OFFICECHARTDEFAULTS
-Statements. - Die Option
AUTO
ist hier logischerweise bedeutungslos, gilt aber nicht als syntaktischer Fehler. - Hinter jedem Tabellen-Statement vom Typ
TABLE
dürfen beliebig vieleOFFICECHART
-Anweisungen folgen. - Für jede
OFFICECHART
-Anweisungen wird unter der Tabelle ein Standard-Excel (bzw. Libre-Office)-Diagramm erzeugt, sofernOFFICEEXPORT
aktiviert ist. - Die Optionen ergeben sich aus der oben dargestellten Syntax.
Es gibt systembedingt eine Reihe von Einschränkungen:
1. Die Tabelle darf nur EIN
CELLELEMENT
je Datenzelle enthalten.
2. Im Default werden alle Zeilen und Spalten der Tabelle dargestellt.
- Man kann sowohl für die Spalten (
COLUMNS
) als auch für die Zeilen (ROWS
) Bereichseinschränkungen formulieren:- Zeilen und Spalten müssen in der Reihenfolge ihrer Position in der Tabelle bezeichnet werden.
- Es können nur zusammenhängende Bereiche angesteuert werden, also z.b.
COLUMNS1:3
für die Einschränkung auf die erste bis dritte Spalte der Tabelle.
3. Eine Ansteuerung über die Codes der Variablen ist nicht möglich.
4. Auch können Tabellenrahmen (
ABSCOL
,
TOTALROW
etc.) nicht angesteuert werden.
5. Von zu langen Labeltexten ist abzuraten.
6. Tabellen müssen darüber hinaus so erzeugt werden, dass die Labels der Y‑Achse nur einen einzeiligen Text enthalten, d.h. alle Labeltexte und die Daten hierzu müssen in direkt aufeianderfolgenden Zeilen der Excel-Tabelle stehen.
7. Es besteht die Einschränkung, dass Charts nur in .xlsx- oder .ods-Dateien exportiert werden.
Zur Syntax:
- Die Parameter dürften selbsterklärend sein.
- Zu
INVERSE
:- Wenn man keine Angabe macht, (intern
INVERSE = NO
), dann werden die Labels der Y‑Achse der Tabelle zur Achsenbeschriftung. - Sollen die Labels der X‑Achse (Kopf) der Tabelle zur Achsenbeschriftung herangezogen, muss
INVERSE
angegeben werden.
- Wenn man keine Angabe macht, (intern
- Zu
PIE
:- In einem
PIE
kann immer nur eine Zeile oder eine Spalte dargestellt werden. - Die Ansteuerung ist analog zu den anderen Charttypen.
- Will man eine Spalte darstellen, muss man eine einzelne Spalte benennen, z.b.
COLUMNS 1:1
bzw.2:2
, und das Diagramm ist normal, also nichtINVERSE
. - Will man eine Datenzeile darstellen, muss eine einzelne Zeile benannt werden, z.b.
ROWS 3:3
, und das Diagramm muss alsINVERSE
gekennzeichnet werden.
- In einem
- Zu
LABELS
:- Die einzelnen Elemente eines Office-Charts können mit Beschriftungen versehen werden.
- Diese werden mit dem
LABELS
-Parameter, einem integer zwischen 0 und 2, angefordert.
0 : Zeige Tabellenwert
1 : Zeige Tabellenwert als Prozent
2 : Zeige Namen
22.02.2018: Neuigkeiten zu OFFICEEXPORTOPTIONS
1. Dokumentationsergänzung
- Neben der Option
ELEMENTFONT
gibt es auchELEMENTCOLOR
. - Hiermit kann man eine Vordergrundfarbe für einzelne
CELLELEMENTS
vereinbaren.
2. Bugfix
- Betrifft
USEPRINTERCOLORS DATACELL
. - Hier wurden nur die Vordergrundfarben (Schriftfarben) übertragen, die Hintergrundfarben wurden ggf. nicht
übertragen. - Gefixt!
3. Hinweis zu .xlsx und
VARTITLE X
- Bei der Anwendung der Option
CONNECTEXCELCELLS
, z.B. aufVARTITLE X
, wird ggf. der Excel-Output im xlsx-Format so herausgeschrieben, dass Excel beim Einlesen unkorrekte Inhalte moniert. - Anschließend ist die Tabelle für das naive Auge völlig ok.
- WORKARAOUND:
1. Man kann .xls verwenden (hier allerdings keine Charts).
2. Wenn man Charts produzieren will und die Excel-Fehlermeldung beim Einlesen auftrit, kann man die .xlsx-Datei mit Excel einlesen und anschließend wieder speichern. Danach sind die Probleme verschwunden.
08.02.2018: Bugfix
- Betrifft
CALCULATECOLUMN
undCOLUMNSUMMARY
- Diese wurden in einigen ausgelieferten Versionen nicht berechnet, die Zellen blieben leer.
- Gefixt!
02.01.2018: Neue Option: POSTPONE für die JSON-Option im INVERTOUT-Statement
- Im Standardfall werden die JSON-Variablen-Beschreibungen in dem Moment geschrieben, in dem das Statement gelesen und verarbeitet wird. Dies ist also ein Spiegel der Zustands der betroffenenen Variablen in zu diesem Zeitpunkt.
- Wenn
ALPHA
-Variablen gelesen werden, und die Zuordnung von Codes zu Labeltexten gespeichert werden soll, muss das Schreiben der JSON-Definition aufgeschoben werden, bis das Lesen der Daten beendet ist. - Dies bewirkt die Option
POSTPONE
. - Vgl. auch unten:
SYNTAX
.
Syntax:
INVERTOUT [ JSON [ POSTPONE ] <jsonpath> ] = <invertpath>;
02.01.2018: Verschiedene Variablen-Typen in INVERTIN/INVERTOUT
- Betrifft:
MULTIQ
,DICHOQ
,ALPHA
,OPEN
undOPENASALPHA
- Invertierte Dateien speichern intern nur numerische atomare Variablen.
- Das bedeutet, dass man für andere Variablen Anpassungen machen muss, damit sie dieser Anforderung entsprechen und ihre Inhalte mit
INVERTOUT
geschrieben bzw. nach dem Einlesen mitINVERTIN
verwendet werden können.
1. Variablen vom Typ
MULTIQ
:
- Bei ihrer internen Verarbeitung erscheinen sie als Liste von atomaren numerischen Variaben, die die erste, zweite … Nennung enthalten.
- Diese tauchen nach dem Einlesen der invertierten Datei wieder auf, lediglich die Zusammenfassung in die
VARFAMILY
muss manuell wieder hergestellt werden.
2. Variablen vom Typ
DICHOQ
:
- Hier gilt sinngemäß dasselbe wie oben.
3. Variablen vom Typ
ALPHA
:
- Sie sind schon mal vom Typ her atomare Variablen.
- Außerdem haben sie immer auch einen numerischen Wert, der sich beim Einlesen ihrer Alpha-Texte ergibt.
- Jeder Alpha-Text, der sich von allen vorherigen unterscheidet, wird der Variablen als Label angefügt, und hierbei wird immer ein neuer Code erzeugt.
- Diesen Wert enthält die Variable als “current value”.
- Sie wird deshalb auch numerisch in das
INVERTOUT
-File geschrieben. - Damit sind allerdings die ursprünglichen Alpha-Texte noch nicht wieder hergestellt.
- Zwei dinge müssen noch geschehen: 1. Die Code/Text-Zuordnungen müssen an das einlesende Skript übergeben werden. 2. Bei der Erzeugung müssen alle Labels in Form eines Syntax-File gepeichert werden.
- Nun ist das übliche Praxis, weil ja auch die Labeltexte aller anderen Variablen in dieser Form übergeben werden:
SYNTAX VARLABELS VARTITLE VALUELABELS = <path>;
-
Dieses Statemen muss jetzt um die
POSTPONE
-Option erweitert werden (s.u.):
SYNTAX POSTPONE VARLABELS VARTITLE VALUELABELS = <path>;
- Auf der einlesenden Seite muss diese Syntax-Definition einbezogen werden, danach kann man mit dieser Variablen alles treiben wie gehabt.
- Es gibt aber einen klitzekleinen Unterschied: Es ist jetzt eine numerische Variable mit
LABELS
und nicht mehrALPHA
.
4. Variablen vom Typ
OPENASALPHA
:
- Sie sind weder numerisch noch atomar.
- Ihr Inhalt kann aber mit einem
COMPUTE ALPHA
in eine Variable vom TypALPHA
übertragen werden:
COMPUTE ALPHA o1_a = o1_alpha;
- Danach geht es weiter wie oben beschrieben.
5. Variablen vom Typ
OPEN
:
- Variablen vom Typ
OPEN
enthalten numerische Wertemengen. Ihnen können beliebig viele Codes zugeordnet werden. - Sie passen formal nicht ins Schema einer invertierten Datei.
- Man muss ihre Werte in eine Mehrfachnennungs-Variable übertragen, deren atomare Bestandteile automatisch ins invertierte File übertragen werden, z.B.:
MAKEFAMILY o1_n = 5; COMPUTE LOAD o1_n = o1;
- Auf der einlesenden Seite müssen diese mit einem
VARFAMILY
-Statement wieder zu einer Mehrfachnennungs-Variable zusammengefasst werden:
VARFAMILY o1_n = "o1_n $1" TO "o1_n $5";
02.01.2018: Zusätzliche Option: POSTPONE
- Zusätzliche Option
POSTPONE
für dasSYNTAX
-Statement im Zusammenhang mitINVERTOUT
- Im Standardfall werden
SYNTAX
-Files in dem Moment geschrieben, in dem das Statement gelesen und verarbeitet wird. Dies ist also ein Spiegel des Zustands der betroffenenen Variablen zu diesem Zeitpunkt. - Für den Spezialfall, dass
ALPHA
-Variablen gelesen werden, und die Zuordnung von Codes zu Labeltexten gespeichert werden soll, muss allerdings das Schreiben der Syntax-Definition aufgeschoben werden, bis das Lesen der Daten beendet ist. Dies bewirkt die OptionPOSTPONE
. - Das ist dann relevant, wenn man in invertierten Dateien auch die Inhalte von
ALPHA
-Variablen speichert. - Invertierte Dateien sind von ihrer Struktur auf Effizienz designed, und sie enthalten nur numerische Daten.
- Die den Labels zugeordneten Codes werden automatisch gespeichert.
- Um solche Variablen nach dem Lesen aus invertierten Dateien auszuwerten, bedarf es der zughörigen Label-Informationen. Diese wird im
SYNTAX
-File mit ausgegeben, wenn die OptionPOSTPONE
gesetzt ist.
27.12.2017: Codes und Verbatims parallel aus einem OPENQFILE lesen
Syntax:
SINGLEQ <offen_alpha> = OPENASALPHA DATA <offen>;
<offen> ::= Name der OPEN-Variablen wie im OPENQFILE
<offen_alpha> ::= Name der zusätzlich zu erzeugenden Variable mit dem Alpha-Text
- Damit man Codes und Text im Skript parallel ansprechen kann, müssen aus einer
OPEN
-Variablen imOPENQFILE
zwei Variablen mit unterschiedlichen Namen im Skript werden. - Dies wird dadurch gelöst, indem man zu jeder Standard-
OPEN
-Variablen (numerische Codes) jeweils eine zusätzlicheOPEN
-Variable erzeugt, die nicht direkt aus demOPENQFILE
gelesen wird, sondern die Textinformation aus der Datenzeile der Ursprungsvariablen ableitet. - Damit dies geschehen kann, muss die zusätzliche Variable einen Verweis kennen, aus der Datenzeile welcher Variablen der Text entnommen werden soll.
- Das Variablen-Statement der Standard-Variablen sieht aus wie immer, z.b.:
SINGLEQ offen1 = OPEN;
- Die zusätzliche Variable, die den Alpha-Text enthalten soll, wird ebenso mit dem
SINGLEQ
-Statement erzeugt. - Statt des Schlüsselwortes
OPEN
steht hierOPENASALPHA
, gefolgt vom Datenverweis nach dem SchlüsselwortDATA
und dem Variablennamen, wie er imOPENQFILE
steht. Z.B.: SINGLEQ offen1_alpha = OPENASALPHA DATA offen1;
Beispiel für eine Anwendung in einem Makro:
#macro #openplusalpha( &name ) SINGLEQ &name = OPEN; SINGLEQ &name_alpha = OPENASALPHA DATA &name; #endmacro #domacro( openplusalpha offen1 offen2 offen3 offen4 offen5 offen6 )
- In diesem Beispiel wird davon ausgegangen, dass im
OPENQFILE
die Codes und Verbatims der Variablen offen1, offen2, offen3, offen4, offen5 und offen6 vorhanden sind. - Im Makro werden zusätzlich die Variablen offen1_alpha bis offen6_alpha erzeugt, die die verbatims enthalten.
- SPSS-sav-Files: Wenn man sowohl die Texte als auch die numerischen Codes einer Studie ins sav-File schreiben will, werden die zusätzlich mit
OPENASALPHA DATA
erzeugten Variablen automatisch übernommen. Dies ist das standardverfahren fürOPENASALPHA
-Variablen. - Die Variable, die die Codes enthält, werden nicht automatisch übertragen, da es sich bei deren Inhalten um Wertemengen handelt, für die es in SPSS-Files keine Entsprechung gibt.
27.12.2017: Syntaxerweiterung: FILEKEY für CSVINFILE
Syntax:
CSVINFILE [ FILEKEY <key> ] [ <delimchar> ] = <filepath>;
- Auch CSVINFILEs können mit einem FILEKEY versehen werden.
- Der Mechanismus funktioniert analog zur Bindung selektierter OPENQFILEs an DATAFILEs.
Beispiel:
CSVINFILE FILEKEY before2016 = "..\DATA2014\data.csv"; CSVINFILE FILEKEY before2016 = "..\DATA2015\data.csv"; CSVINFILE FILEKEY 2016 = "..\DATA2016\data.csv"; CSVINFILE FILEKEY 2017 = "..\DATA2017\data.csv"; KEY OPENQFILE = panelno; OPENQFILE FILEKEY before2016 = "..\OPEN2014\opn.*"; OPENQFILE FILEKEY before2016 = "..\OPEN2015\opn.*"; OPENQFILE FILEKEY 2016 = "..\OPEN2016\opn.*"; OPENQFILE FILEKEY 2017 = "..\OPEN2017\opn.*";
27.12.2017: Syntaxerweiterungen: ALLOWEMPTY und FILEKEY für DATAFILE und OPENQFILE
Syntax:
DATAFILE [ FILEKEY <key> ] [ ALLOWEMPTY ] = <filepath>;
und
OPENQFILE [ FILEKEY <key> ] [ ALLOWEMPTY ] = <filepath>;
1. Zu
FILEKEY
:
- Im Defaultfall werden alle
OPENQFILE
s allenDATAFILE
s zugeordnet. Das entspricht in der Regel auch den Anforderungen. - Die Zuordnung von Zeilen der
OPENQFILE
s zu den Fällen in denDATAFILE
s geschieht allein über den Inhalt des Schlüssels, der numerisch oder alphanumerisch sein kann. - In Spezialfällen (z.b. Wellenbefragungen in Panels) soll neben dem Fallschlüssel (z.b. Identifikation im Panel) auch zwischen den Befragungswellen unterschieden werden.
- Mit der Option
FILEKEY
kann man nunDATAFILE
s undOPENQFILE
s eigenen Gruppen zuordnen. - Wenn bei einem
DATAFILE
einFILEKEY
gesetzt ist, werden aus der Gesamtmenge aller über Schlüssel verwalteten offenen Antworten nur die herausgesucht, die ausOPENQFILE
s stammen, die denselbenFILEKEY
haben.
Beispiel:
DATAFILE FILEKEY 2016 = "..\DATA2016\data.*"; DATAFILE FILEKEY 2017 = "..\DATA2017\data.*"; OPENQFILE FILEKEY 2016 = "..\OPEN2016\opn.*"; OPENQFILE FILEKEY 2017 = "..\OPEN2017\opn.*";
- Hiermit ist sichergestellt, dass den Daten aus dem Verzeichnis ‘DATA2016’ nur offene Antworten zugeordnet werden, die im Verzeichnis ‘OPEN2016’ vorgefunden wurden.
- Wie man sieht, kann ein
FILEKEY
beliebig vielenOPENQFILE
s bzw.DATAFILE
s zugeordnet werden, denn mit z.b. “data.*” kann eine beliebig große Menge Dateien bezeichnet sein.
2. Zu
ALLOWEMPTY
:
- Im Defaultfall überwacht GESStabs, dass aus jedem
DATAFILE
- bzw.OPENQFILE
-Statement wenigstens eine gültige Datei resultiert. - Ist dies nicht der Fall, wird der Lauf mit einem Syntaxfehler abgebrochen.
- Die Option
ALLOWEMPTY
erlaubt leere Ergebnismengen der Wildcard-Suche.
24.12.2017: Syntaxerweiterung von SORT AS in OVERVIEW-Tabellen
- Neue Variablen-Option:
CODE <reference-code>
- Neue TABLE-Option:
SORT AS
- Gemeinsam ergeben diese neuen Optionen die Möglichkeit, Sortier-Reihenfolgen von Standardtabellen an Mittelwertübersichten zu vererben.
Syntax des gesamten Statements:
OVERVIEW <tableoptions> = <kopf> BY <cellelementlist>( <varlist> ) [ SORT <cellelement> [ DESCEND ] [ PANE <number> CODE <number> ] ] ; <varlist> ::= <var> | <varlist> <var> <var> ::= <varname> <varoption>
- In den
TABLEOOPTIONS
(vor dem ‘=’) wird jetzt auchSORT AS
ausgewertet. -
SORT AS
kann sich auch auf Tabellen vom TypTABLE
beziehen, die z.B. mitSORT ABSOLUTE DESCEND
sortiert sind. - Wenn dann eine Übersichtstabelle mit mehreren
MEAN
etc. in einer korrespondierenden Reihenfolge sortiert werden soll, können einzelne Variablen den Ausprägungen in der Ursprungstabelle zugeordnet werden.
Syntax:
<varoption> ::= [ SORTCLASS <number> ] [ LEVEL <number> ] [ FILTER <log.bedingung> | ] [ USEFONT <font> ] [ USEWEIGHT <variable> ] [ DESCRIPTION <string> ] [ CODE <reference-code> ]
Beispiel:
- Den Ausprägungen 1 bis 5 einer Variablen namens a17 mögen die Variablen a15 bis a19 entsprechen:
1 .. a15
2 .. a16
3 .. a17
4 .. a18
5 .. a19 - Die
OVERVIEW
-Tabelle kann dann korrespondierend zu den Häufigkeiten der Ausprägungen 1 .. 5 sortiert werden, indem man den Variablen die Codewerte entsprechend zuordnet.
TABLE NAME sortbase = x4 BY a17 SORT ABSOLUTE DESCEND; OVERVIEW SORT AS sortbase = x4 BY MEAN( a15 CODE 1 a16 CODE 2 a17 CODE 3 a18 CODE 4 a19 CODE 5 );
- Die Code-Zuordnungen müssen eindeutig sein: wenn mehr als eine Variable in einem
OVERVIEW
-Statement denselben Code bekommen, führt dies zu einem Syntaxfehler. - Wenn man Variablen auf diese Weise Referenzcodes zuteilt, sollte man dies vollständig für alle darzustellenden Variablen machen, da ansonsten vom System Referenzcode vergeben werden, die zu entsprechenden Fehlern führen können.
23.12.2017: Syntaxerweiterung zu INVERTOUT
Syntax:
INVERTOUT [ JSON <jsonpath> ] = <filepath>;
- Wenn in der JSON-Klausel ein gültiger Filepath steht, wird in diese Datei eine Beschreibung des Inhalts der
INVERTOUT
-Datei abgelegt. - Diese Beschreibung enthält alle Variablen, deren Vartitle, deren Text und deren Labels.
23.12.2017: Neues Statement: MINROWTOTAL[GLOBAL]/ MINCOLUMNTOTAL[GLOBAL]
- Neue Statements zum Unterdücken von Spalten/ Zeilen, bei denen im Total eine Untergrenze bei speziellen
Cellelements
unterschritten wird.
Syntax:
a) als nachgestellte Option zu einem
TABLE
-Statement:
MINROWTOTAL <cellelement> = <value>; MINCOLUMNTOTAL <cellelement> = <value>;
b) als globale Voreinstellung:
MINROWTOTALGLOBAL <cellelement> = <value>; MINCOLUMNTOTALGLOBAL <cellelement> = <value>; <cellelement> ::= [ COLUMNPERCENT | ROWPERCENT | MEAN | ABSOLUTE | PHYSICALRECORDS ]
c) zum Ausschalten der globalen Voreinstellung:
MINROWTOTALGLOBAL = NO; MINCOLUMNTOTALGLOBAL = NO;
21.12.2017: Erweiterung des DUMMYHEAD-Statements
-
DUMMYHEAD
dient dazu, einen Kopf fürTable Structure
/Table add
zu definieren. -
DUMMYHEAD
definiert die Labeltexte — was aber vermisst wurde, ist die Funktionalität, dieOVERCODE
in Labels haben. - Das
DUMMYHEAD
-Statement darf jetzt eine Labels-Klausel enthalten, und diese darf Overcodes enthalten.
Syntax:
DUMMYHEAD = <varname> LABELS OVERCODE 1 2 "Labeltext.... 1 "Labeltext" 2 "Labeltext" ... ;
- Das
DUMMYHEAD
‑Statement erzeugt dann nicht nur die explizit genannte Variable, sondern für jedes Label, das NICHT Overcode ist, eine zusätzliche Variable mit dem konstanten Wert des Labelcodes. Deren Name ist <varname>__<labelcode>. - Auch die
Table add
-Statements müssen angepassen: Anstelle der konstanten Zahlenwerte müssen die zusätzlich generierten Konstanten-Variablen verwendet werden, also z.b. “k_dummy__1” statt numerisch 1, usw..
Beispiel:
dummyhead = k_dummy labels overcode sum 1 2 "Alter 1 + 2" 1 "Alter 1" 2 "Alter 2" 3 "Alter 3" ; compute alter = random( 65 ) + 18; TABLE STRUCTURE = k_dummy BY x3; tablefilter 1 = text "" [17:45] in alter; table add = k_dummy__1 by x3 #s; tablefilter 1 = text "" [46:60] in alter; table add = k_dummy__2 by x3 #s; tablefilter 1 = text "" [61:99] in alter; table add = k_dummy__3 by x3 #s;
- In einem so definierten
DUMMYHEAD
, bei dem die Labels innerhalb der erweiterten Syntax definiert werden, werden auch die Overcodes aus denDUMMYHEAD
-Labels gezählt — da alle Subvariablen die Labels derDUMMYHEAD
-Variablen erben, und damit auch die Overcode-Definitionen.
15.12.2017: Textergänzungen mit PREPEND/ APPEND
- Mit
PREPEND
undAPPEND
könnenVartitle
oderVartexte
modifiziert werden, indem man Textbestandteile angehängt oder vorangestellt werden. - In den Statements, die sich auf
Vartexte
beziehen, gilt die Syntax für Texte (Zeilenumbrüche etc. dürfen enthalten sein).
Syntax:
PREPEND VARTEXT <varlist> = <text>; APPEND VARTEXT <varlist> = <text>; PREPEND VARTITLE <varlist> = <string>; APPEND VARTITLE <varlist> = <string>;
13.12.2017: Bugfix
- Betrifft
MarkMeanRow
/MarkMeanColumn
- Interne Kennzeichungen über die Signifikanz von Mittelwertunterschieden wurden via GESS ChartFactory in PowerPoint-Charts übertragen.
- Gefixt!
6.12.2017: CSVINFILE
- Die Anzahl der Semikola in den Datenzeilen wird nicht mehr überwacht.
- Leere Felder nach dem letzten Semikolon erzeugen in der/ den betroffenen Variablen ein MISSING.
5.12.2017: Problemhinweis für ASSOCFILE spaltenfixiert
- Wenn eine Datei, die als
ASSOCFILE
eingelesen werden soll, UTF8-BOM-kodiert ist, wird der Schlüssel in der ersten Datenzeile imASSOCFILE
nicht korrekt gelesen, da die 3‑Bytes des BOM als Inhalt interpretiert werden. - Es ist weiterhin grundsätzlich bei spaltenfixierten Datensätzen darauf zu achten, dass diese nicht in UTF8 oder UTF8BOM kodiert sind.
- Sind zeichen außerhalb von ASCII (0..127) enthalten, werden die spalten falsch interpretiert. Solche Fehler sind u.u. sehr schwer zu finden.
5.12.2017: Bugfix
- Betrifft
MIN MAX
-
MIN MAX
alsCELLELEMENTS
lieferten keine Werte. - Gefixt!
5.12.2017: Bugfix
- Betrifft
IF .. PRINT
in Datei - Sonderzeichen in der Pfadangabe wurde nicht korrekt an Windows übergeben (Windows mag kein UFT8).
- Gefixt!
5.12.2017: Bugfix
- Betrifft
EXPANDINTOKEN
- Es kam vor, dass
EXPANDINTOKEN
-Anweisungen, die durch einIFDEF
eigentlich ausgeschaltet sein sollten, vom Preprozessor doch angewendet wurde. - Gefixt!
5.12.2017: Neues Statement: AUTOCLEAR
Syntax:
AUTOCLEAR = [ YES | NO ];
- Voreinstellung: NO
- Als Default werden explizit alle Variablen innerhalb eine GESStabs-Laufs vor dem Einlesen des nächsten Falles gecleart, d.h. explizit auf Missing gesetzt.
- Wenn man absehen kann, dass dies unnötig ist, kann man diese Option auf NO setzen.
- Bei einer Million Fällen aus einer invertierten Datei ist der Zeitgewinn relevant.
5.12.2017: Neues Statement: ATOMVARSHORTCUT
Syntax:
ATOMVARSHORTCUT = [ YES | NO ];
- Voreinstellung: NO
- Hiermit kann man für atomare Variablen eine beschleunigte Vearbeitung bei der Bereitstellung von Werten für eine Tabelle oder Computes einstellen.
- Man sollte dies nur tun, wenn man Variablen verwendet, die Overcodes enthalten.
23.11.2017: USEWEIGHT
- Wenn der Inhalt einer Variablen mittels
USEWEIGHT
zum gültigen Gewicht für eine oder mehrere Tabellen verwendet wird (USEWEIGHT = <varname>;Z), und diese Variable den aktuellen
SETMISSING
-Wert enthält, dann wird für diesen Fall das Gewicht 0 verwendet. - Die Logik dahinter: ein Fall, dessen Gewicht nicht bestimmt ist, kann in einer gewichteten Auswertung nicht verwendet werden.
23.11.2017: Schreiben und Lesen invertierter Datenfiles
- Neue Statements:
INVERTIN
,INVERTOUT
,ZIPINVERTOUT
,INVERTOUTMAX
- Als neues (proprietäres) Dateiformat kann GESStabs invertierte Datenfiles schreiben und lesen.
- In “normalen” Datenfiles (
DATAFILE
,CSVINFILE
,SPSSIN
) sind die Werte fallweise angeordnet; die Dateien enthalten sequentiell Fälle und alle deren Werte. - Bei invertierter Speicherung ist das umgekehrt: alle werte der einzelnen Variablen sind zusammenhängend gespeichert.
- Diese Speicherform erlaubt sehr effizientes Lesen, wenn nur wenige Variablen benötigt werden.
- Der idealtypische Anwendungsfall ist, wenn aus sehr großen Dateien einzelne Tabellen mit wenigen Variablen erzeugt werden sollen.
- Mit
INVERTOUT
kann eine solche Datei gespeichert werden, ähnlich wie mitSPSSOUTFILE
. - Ein invertiertes File ist nur ein Datenfile; weder Valuelabels noch Vartitle oder Texte sind darin enthalten. In dieser Hinsicht ist es mit einem
CSVINFILE
vergleichbar, mit einem Unterschied: der Zustand der MISSING-Values (das globaleSETMISSING
und variablenbezogeneMISSING
) werden übertragen. -
INVERTIN
ist das komplementäre Statement, diese Datei wieder zu lesen. - Im Anschluss an das
INVERTIN
-Statement sind die Variablennamen im GESS-Skript bekannt. - Die Daten in den invertierten Files können komprimiert gespeichert werden (ZIP). Dies wird mit
ZIPINVERTOUT (YES/NO)
gesteuert. - Das
INVERTIN
-Statement erkennt, ob es sich um komprimierte Daten handelt oder nicht. - Die Werte in den invertierten Dateien sind in Blöcken von x Fällen gespeichert. Diese Speichergröße beträgt im Standardfall 16384. Man kann dies mit
INVERTOUTMAX
anpassen.
23.11.2017: Semikolon und Anführungszeichen in Datenfeldern in CSVINFILE
- Strings in Datenfeldern, die durch ” oder ’ eingeschlossen sind, dürfen das Feldtrennzeichen ; enthalten.
- Außerdem dürfen “” oder ” verwendet werden, die dann als einzelner Char interpretiert werden.
- Das letzte Feld in einer Datenzeile muss nicht durch ein Semikolon abgeschlossen werden.
21.22.2017: Bugfix
- Betrifft
AUTOOVERSORT
-Problem - Wenn
SORTCLASS
an Overcodes und außerdemSORTCLASS
an Labels, die keinem Overcode angehören, mitAUTOSORTCLASS
(das Resultat der Auflösung der internen Hierarchie von Labels und Overcodes imAUTOOVERSORT
) zusammen kamen, wurde der Vorrang vonSORTCLASS
vorAUTOSORTCLASS
falsch aufgelöst. - Gefixt!
21.11.2017: Bugfix
- Betrifft Ausgabe in SPSS-Statement
- Nach einer internen Aufräumaktion wurden die Variablennamen in exportierten SPSS-Valuelabels-Statements nicht an SPSS-Standards “gemangelt”.
- Gefixt!
23.10.2017: Bugfix
- Betrifft
COLUMNSUMMARY
- Einzelne Zellen der Totalspalten wurden bei der Ausführung von
COLUMNSUMMARY
fehlerhaft gelöscht. - Gefixt!
28.09.2017: Neues Feature: OFFICEEXPORT
-
OFFICEEXPORT
ist eine neue Methode, GESStabs-Tabellen nach Excel (.xls, .xslx) oder in Libre Office-Spreadsheets (.ods) zu exportieren. - Der Funktionsumfang ist ähnlich wie bei
INSTANTEXCEL
, der Export erfolgt ohne Beteiligung von Excel/ Libre Office durch GESStabs. Der Vorteil ist eine wesentlich höhere Verarbeitungsgeschwindigkeit. - Da die Gestaltung nicht über HTML/ CSS erfolgt, gehören damit auch die Begrenzungen der Kompatibilität beim HTML-Import durch Excel der Vergangenheit an, insbesondere die teilweise mängelbehaftete Interpretation von CSS durch Excel.
- Generell gilt: ebenso wie bei
INSTANTEXCEL
führt eineNEWCHAPTER
-Anweisung vor einer Tabellenanweisung dazu, dass ein neues Worksheet in Excel/ Libre Office angelegt wird. - Ebenso wie bei
INSTANTEXCEL
führt eineNEWPAGE
-Anweisung vor einer Tabellenanweisung dazu, dass ein Seitenvorschub
im Worksheet angelegt wird. Dieser wird dann beim Ausdruck von Excel bzw. Libre Office ausgewertet. - Der Export wird durch das
OFFICEEXPORT
-Statement angefordert.
Syntax:
OFFICEEXPORT = <filename> ;
-
<filename>
muss eine der folgenden Extensions haben : xlsx | xls | ods. Über die Extension wird automatisch das interne Format der Export bestimmt. - Zur Steuerung des Layouts gibt es das neue statement
OFFICEXPORTOPTIONS
.
Syntax:
OFFICEXPORTOPTIONS [ EDIT ] = { <option> } *n;
- Wenn die Option
EDIT
gesetzt ist, werden nur die explizit angegebenen Optionen geändert, alle anderen Optionen behalten ihre Werte, analog zu +/- beiTABLEFORMATS
.
<option> ::= [ <boxfont> | <elementfont> | <background> | <foreground> | <verticalalign> | <horizontalalign>| <useprintercolors> | <frames> | <wraptext> | <connectexcelcells> | <labelwidth> ]
- Als Optionen stehen folgende Elemente zur Verfügung:
- Schrifttyp und ‑format eines definierten Boxtyps (
BOXFONT
) - Schrifttyp und ‑format eines einzelnen Zellenelements (
ELEMENTFONT
) - Hintergrund- und Schriftfarben einer Tabellenbox (
BACKGROUND FOREGROUND
) - vertikale/ horizontale Ausrichtung von Texten (
VERTICALALIGN HORINZONTALALIGN
) - Übergabe der Farbgebung aus der PDF-/ PS-Ausgabedatei in Excel (
USEPRINTCOLORS
) - Formatierungen von Rahmen (
FRAMES
) - Zusammenfassung einzelner Zeilen in Datenzellen (
CONNECTEXCELCELLS
) - Einstellungen für Fließtexte (
WRAPTEXT
) - Zellenbreiten (
LABELWIDTH
)
- Schrifttyp und ‑format eines definierten Boxtyps (
Beispiel:
officeexport = direct.xlsx; #expand #gray $333333 officexportoptions = | drawbox tabletitle : weight medium borders bottom color #gray | drawbox labels x : weight thin color #gray | drawbox labels y : weight thin color #gray | boxfont tabletitle : "dejavu sans" size 14 option bold | elementfont colchiqu : "Constantia" size 10 option bold | VerticalAlign tabletitle : vcenter | HorizontalAlign datacell : hcenter | UsePrinterColors datacell : yes | labelwidth : 350 | background labels y : $ccffdd | foreground labels y : $FFEEEE ;
- Tutorial zu
OFFICEEXPORT
: siehe hier.
16.08.2017: Neue Statements: SIGNIFMINEFFECTCHIQ und SIGNIFMINEFFECTTTEST
Syntax:
SIGNIFMINEFFECTCHIQ = <value>;
bzw.
SIGNIFMINEFFECTTTEST = <value>;
- Neues Feature: Begrenzung der Ausgabe von Sigifikanzkennzeichnung durch minimale Effektgröße
- Hintergrund: Über Tabellenbände wird gern das Füllhorn statistischer Tests (Signifikanztests) ausgeschüttet. Bei höheren Fallzahlen werden oft allerdings auch Zusammenhänge signifikant, deren geringe Effektstärke eine weitergehende Interpretation oft unsinning erscheinen lässt. Die Signifikanz ist ja nur die Aussage darüber, wie unwahrscheinlich es ist, dass die Nullhypothese gilt, dass dieser Zusammanhang also in der Grundgesamtheit nicht existiert. Je größer die Stichprobe, desto geringere Effekte werden als signifikant gekennzeichnet.
- Es liegt also nahe, die Kennzeichnung von Signifikanz in solchen Fällen zu unterdrücken, in denen der vorgefundene Unterschied einen vom Benutzer vorzugebenden Minimalwert nicht erreicht. Die Statistik kennt hierfür Maße der Effektstärke, die sonst auch als Zusammenhangsmaße verwendet werden.
- Die am häufigsten verwendeten Signifikanztests in den Tabellenbänden testen Unterschiede von Anteilen (Prozentwerten) oder von Mittelwerten.
- Zur Messung der Effektstärke bei Tests aus der ChiQu-Familie (
COLCHIQU
,ROWCHIQU
,HYCOLCHIQU
etc.) wird Cramer´s Phi berechnet (das numerisch identisch ist mit Cohen´s w). Wird hierbei nicht mindestens ein Effekt der StärkeSIGNIFMINEFFECTCHIQ
erreicht, wird die Ausgabe des Signifikanzbuchstabens für diese Zelle unterdückt. Der Wertebreich von Phi ist 0 bis 1. - Für die Bewertung von Mittelwertunterschieden (
TTEST
,MEANTEST
,HYMEANTEST
,ESSMEANTEST
etc.) wird Cohens d berechnet. Der Mechanismus funktioniert entsprechend: Wird nicht mindestens ein Effekt in Höhe vonSIGNIFMINEFFECTTTEST
erreicht, wird der Signifikanzbuchstabe unterdrückt. Wie bei allen Maßen für Effektstärke bedeutet 0 auch hier, dass kein messbarer Zusammenhang besteht. Cohens d kann aber auch Werte größer 1 annehmen. - In aller Regel wird man für Cramer´s Phi (
SIGNIFMINEFFECTCHIQ
) kleinere Grenzwerte ansetzen als für Cohens d (SIGNIFMINEFFECTTTEST
). Wenn bei letzterem die “Pooled Variance” den Wert 0 hat, wird Cohens d numerisch unzulässig (vulgo unendlich). In dem Fall wird der Test nicht durchgeführt. -
SIGNIFMINEFFECTCHIQ
bzw.SIGNIFMINEFFECTTTEST
sind Tabellen-Voreinstellungen, sie gelten für alle in der Folge vereinbarten Tabellen. - Mit
SIGNIFMINEFFECTCHIQ
oderSIGNIFMINEFFECTTTEST
= 0; kann man die Restriktion wieder ausschalten. - Wird durch einen dieser Tests ein Signifikanzbuchstabe unterdrückt, wird dies ggf. im STATTESTDUMP-File protokolliert.
26.05.2017: Warnung im Zusammenhang mit INSTITUTION = “”;
- Bis Ende 2016 war der Institutsname, so wie in der Lizenz vereinbart, immer Bestandteil der Ausgabe von
INSTITUTION
. Dies diente als ein minimaler Kopierschutz. - Seit der Einführung des Lizenzsystems über das Internet ist dies nicht mehr erforderlich, und Kunden hatten darum gebeten, dass man den Text von
INSTITUTION- komplett anpassen kann. Die Software wurde entsprechend angepasst.
- Da der Inhalt von
INSTITUTION
der Name des ersten Sheets bei Ausgabe mitINSTANTEXCEL
ist, gibt es dann Probleme, wennINSTITUTION = "";
gesetzt wird, da Excel einen leeren String nicht als Name eines Sheets akzeptiert. - Der Lauf wird dann mit der dem Runtimeerror “cannot set name of sheet in excel” abgebrochen.
- Abhilfe:
INSTITUTION = "";
vermeiden, wenn eine Excel-Ausgabe geplant ist
26.05.2017: Anpassung der Namen atomarer Variablen
- Betrifft die Anpassung der Namen atomarer Variablen von MULTIQ und DICHOQ bei der Speicherung in ASCIIOUTFILE DELIMITED an die Namen, die GESS Q. ausgibt.
- Die Namen werden jetzt bei Verwendung von
MODIFYCSVNAMES = YES;
dem angepasst, wie GESS Q. solche Variablen benennt. - Die Namensbestandteile “ $1” etc. werden in “_1” etc. umgewandelt.
23.05.2017: Funktionsanpassung bei CALCULATECOLUMN
-
CALCULATECOLUMN
wertet Zahlenwerte aus, die den Zellen eindeutig zugeordnet sind. - Diese konnten allerdings auch Zahlenwerte sein, die bei der weiteren Verarbeitung der Ausgabe unterdrückt werden, z.B. durch
SUPPRESSIFLESS
. -
CALCULATECOLUMN
prüft jetzt, ob diese Zellen im Verlauf der Ausgabe einen String enthalten, der einen Zahlenwert darstellt: nur dann wird der Zellenwert ausgewertet. Sonst gilt die Zelle als missing.
09.05.2017: neue syntaktische Variante von MARKCELLS
- auf Basis von Häufigkeiten in PS und PDF
Syntax:
MARKCELLS = YES COMPUTE COLOR SIGNIFLEVEL [ SIGNIF90 | SIGNIF95 | SIGNIF99 | SIGNIF999 ] GT <colorGT> LT <colorLT> ;
- In dieser Version (
MARKCELLS COMPUTE
) wird für jede Zelle aus den Randverteilungen und der Zellenbesetzung die “Unwahrscheinlichkeit” der empirischen Besetzung als p‑Wert berechnet. - Aus dem
SIGNIFLEVEL
ergibt sich ein Intervall (0..SIGNIFLEVEL
). - Die Zellen, deren p‑Wert in diesem Intervall liegt, werden farblich gekennzeichnet.
- Eine Zelle mit dem p‑Wert=0 wird mit einem benannten Farbwerte (
colorGT
bzw.colorLT
) gefärbt. - Zellen, deren p‑Wert größer ist als das
SIGNIFLEVEL
, behalten einen weißen Hintergrund. - Zellen, deren p‑Werte zwischen 0 und
SIGNIFLEVEL
liegen, werden mit einer proportional angepassten Farbe zwischencolorGT
bzw.colorLT
und weiß eingefärbt. - Lange Rede, kurzer Sinn: Je signifikanter die Abweichung vom Erwartungswert, desto kräftiger die Farbmarkierung.
- Wenn
TABLEFORMAT EXCELCOLOR
gesetzt ist, werden die Hintergrundeinfärbungen auch in Excel übertragen.
03.05.2017: neues CELLELEMENT MARKCELLSPVALUE
- Der Einfärbung von Zellen im Zuge von
MARKCELLS
liegt ja immer irgendein Signifikanztest zugrunde, meistens 2x2-Chiquadrat-basiert. - Man kann für die Abschätzung die Methoden CLASSIC, COLCHIQU, ROWCHIQU etc. einsetzen.
- Die Entscheidung für eine Farbe zur Kennzeichnung geschieht anhand des p‑Wertes.
- Diesen Wert kann man nun auch als ein
CELLELEMENT
ausgeben. - 0.05 enstpricht dem 5%-Niveau, also sollte man ein passendes Format vorsehen, z.b. ‘#.###’.
- Werte > 0.20 werden der Übersichlichkeit halber nicht explizit ausgegeben, sondern durch “–” ersetzt.
15.03.2017: geänderte Voreinstellung zu SPSSSINGLEWRITE
- Die Voreinstellung ist immer YES.
- Wenn man große Mengen von Valuelabels in einem
WRITESPSSFILE
versenken muss, kann man diese Voreinstellung auf NO ändern. - Es hat sich herausgestellt, dass die Methode zum schnellen Speichern auch in der Windows-Version nicht in allen Fällen sicher funktioniert.
16.02.2017: neues Statement IGNORESPSSMISSINGVALUES
Syntax:
IGNORESPSSMISSINGVALUES = [ YES / NO ];
- Wenn eine Variable beim Einlesen eines SPSS-Files den Wert des internen
SysmisVal
von SPSS hat, dann wird dieser beim Einlesen durch denSETMISSING
-Wert von GESS ersetzt. - Alle Variablenwerte aus dem sav-File werden dann als gültig übertragen.
16.02.2017: neues Statement IGNORESPSSSYSMISVAL
Syntax:
IGNORESPSSSYSMISVAL = [ YES / NO ];
- Mit diesem Schalter kann man GESStabs anweisen, die MISSING VALUES in einem SPSS-sav-File beim Einlesen mit SPSSINFILE zu ignorieren.
- Alle Variablenwerte aus dem sav-File werden dann als gültig übertragen.
13.02.2017: Bugfix
- Betrifft:
SPSSOUTFILE
- Die Standardübergabe von
VALUELABELS
an die SPSSIO-Schnittstelle hatte sich in einigen Fällen als zu langsam erwiesen. - Diese Übergabe wurde auf eine andere Methode der SPSSIO-API umgestellt.
- Hierbei ist leider ein Filter verlorengegangen, der Overcodes nicht durchgelassen hat, sodass Overcodes unnötig an SPSS übertragen wurden.
- Gefixt!
13.02.2017: Neues Statement #DOMACRO4
Syntax:
#domacro4 (<filename>)
- Einen ähnlichen Hintergrund wie
#DOMACRO3
hat auch das#DOMACRO4
-Statement. - Der Unterschied ist, dass der Name des Makros nicht im Skript festgelegt wird, sondern als erstes Feld in der CSV-Datei benannt wird.
- Der Aufruf
#domacro4(macrocalls4.csv)
würde bei dem folgenden Inhalt der Datei ‘macrocalls4.csv’
table;a11;a12;
tablea;a11;a13;
tableb;a11;a14;
tablea;a11;a15;
tableb;a11;a16;
table;a11;a17;
die Existenz von drei Macros voraussetzen,#table
,#tablea
und#tableb
. - Die Existenz geeigneter Tabelliermakros vorausgesetzt, können so auch Mitarbeiter, die mit dem Tabellieren nicht vertraut sind, eigene Tabellen definieren.
13.02.2017: Neues Statement #DOMACRO3
Syntax:
#domacro3 (<macroname> <filename>)
- Wie auch
#DOMACRO
und#DOMACRO2
dient das#DOMACRO3
-Statement der wiederholten Abarbeitung von Makros. - Die Makro-Parameter werden hierbei aus einer CSV-Datei entnommen, die am einfachsten mit einem Tabellenverarbeitungsprogramm erzeugt werden kann.
- Dadurch bietet es eine Schnittstelle zu Mitarbeitern, die nicht im Scripting versiert sind.
- Als erster Parameter wird der Makroname übergeben, als zweiter Paramater der Pfad einer CSV-Datei, die zeilenweise die Parameter enthält, die an das genannte Makro übergeben werden sollen.
- Jede Zeile der CSV-Datei generiert einen Makro-Aufruf.
- Die einzelnen Felder ( durch ‘;’ getrennt ) werden als die einzelnen Parameter interpretiert.
Ein einfaches Beispiel:
- Gegeben sei folgendes Makro:
#macro #table( &1 &2 ) table = &1 by &2; #endmacro
- … und folgender Aufruf:
#domacro3( table, macrocalls.csv )a11;a12;
- Die CSV-Datei ‘macrocalls.csv’ enthält folgende Zeilen:
a11;a13;
a11;a14;
a11;a15;
a11;a16;
a11;a17;
- Hierdurch würden 6 verschiedene Tabellen erzeugt:
a11 by a13
,a11 by a14
etc.
13.02.2017: Neues Statement SPSSSINGLEWRITE
- Die Übergabe von
VALUELABELS
an SPSS-.sav-Files wurde aus Performancegründen auf eine SPSS-Methode umgestellt, die wesentlich effizienter identische valulabels an mehrere Variablen überträgt. - Leider führt diese Methode in einigen Fällen zu Fehlernvinnerhalb der SPSS-API.
- Da dieser Fehler mit der SO-Bibliothek unter Linux regelmäßg auftritt, wird diese schnellere Methode unter Linux mit der Voreinstellung ‘NO’ automatisch unterbunden.
Syntax:
SPSSSINGLEWRITE = [ YES | NO ] ;
(Voreinstellung: Windows: NO, Linux: YES)
12.01.2017: Bugfix
- Betrifft
CVSINFILE
- Inhalte von Alpha-Variablen im csv-Infile, die ein Semikolon enthalten, wurden vom
CVSINFILE
falsch interpretiert: Ein Semikolon wurde auch innerhalb von durch ” oder ’ eingeschlossenen Strings als csv-Trenner interpretiert. - Gefixt!
11.01.2017: Erweiterung der Datenübergabe an GESS ChartFactory
- Die Datenübergabe an GESS Chartfactory erfolgte bislang als Text-Tatei in einem csv-ähnlichen Format.
- Dieselbe Information wird jetzt auch als xlsx-Datei gespeichert.
- Hintergrund: Excel liest beim Einspielen in einem csv-ähnlichen Format eigenwillig bei Zahlen mit Dezimalstellen immer mindestens zwei Nachkommsstellen, auch wenn nur eine vorhanden ist…
11.01.2017: Bugfix
- Betrifft
INSTITUTION
in HTML. - Bei der Ausgabe von Tabellen in HTML wurde fehlerhaft die
INSTITUTION
aus dem Lizenzschlüssel verwendet. - Jetzt wird der
INSTITUTION
-String verwendet, der ggf. durch dasINSTITUTION
-Statement modifiziert wurde
22.11.2016: Neue Option CALCCOLLOWACCURACY
-
CALCCOLLOWACCURACY
= CALCulateCOLumnLOWACCURACY
Syntax:
CALCCOLLOWACCURACY = [ YES | NO ] ;
- Globaler Schalter für den gesamten Lauf
- Bei
CALCULATECOLUMN
undCOLUMNSUMMARY
werden bei Berechnungen als Default die exakten Werte der Zellinhalte herangezogen. - Diese können von den in der Tabelle dargestellten Werten abweichen: ein Wert von 2.352121326 wird in der Tabelle z.b. als 2.4 dargestellt. Wenn man mit Werten mit allen Nachkommastellen rechnet, kann sich z.b. als Differenz ein anderer Wert ergeben, als wenn man nur die ausgewiesenen Ziffern heranzieht.
- Bei manchen Kunden bewirkt man aber keine Zufriedenheit über eine gestiegene numerische Genauigkeit, sondern eher Ablehnung und Beharren auf die Anzeige des Taschenrechners.
- Man kann mit diesem Schalter die Genauigkeit herabsetzen: dann rechnet GESStabs ungenau, wie gewünscht.
15.11.2016: Neue Funktion COLUMNSUMMARY
Syntax:
COLUMNSUMMARY <zielspalte> [ format "#,#..." ] = <function> [ <option>( {<quellspalte>}*n ); <zielspalte> ::= < varno code > <quellspalte> ::= < varno code > <function> ::= [ MEAN | SUM | MIN | MAX ] <option> ::= [ ZEROMISSING | DASHMISSING ]
- Zusätzlich zur Berechnung von Spalten mittels
CALCULATECOLUMN
gibt es hiermit eine weitere Funktion, um in Tabellen weitere Spalten aus bereits bestehenden Spalten zu errechnen. - Über beliebige Quellspalten kann man als Summary den Mittelwert, die Summe, das Minimum oder das Maximum ausgeben.
- Außerdem können die Resultate sowohl mit
CALCULATECOLUMN
als auch mit weiterenCOLUMNSUMMARY
-Statements weiterverarbeitet werden. - Mit den Optionen
ZEROMISSING
undDASHMISSING
kann man steuern, ob leere Zellen in die Berechnung eingehen oder ausgeschlossen werden sollen. - Mit
DASHMISSING
werden Zellen, die mittels ‘-’ als leer gekennzeicnhet sind, vor den Berechnungen ausgeschlossen. Hier gibt es keine Automatik, weil es z.b. bei der Berechnung einesMEAN
über Prozentwerte sinnvoll sein kann, diese Zellen als 0 in die Berechnung einfließen zu lassen. - Bei Prozentwerten in Tabellen wird mit ‘-’ oft eine Zellenbesetzung mit null signalisiert. Bei einem
MEAN
überMEAN
steht das ‘-’ hingegen meist für einen nicht berechenbaren Wert. Da derCOLUMNSUMMARY
-Operator keine Kenntnis über die Natur der Zahlen hat, muss es hier eine Steuerungsmöglichkeit im Script geben. - Der Vollständigkeit halber kann man mittels
ZEROMISSING
auch Zellen aussschließen, in denen eine numerische Null steht. - Beide Optionen werden wohl am häufigsten bei
MEAN
oderMIN
benötigt. Bei SUM ist es ja relativ gleichgültig, ob eine Null addiert wird oder nicht.
22.9.2016: Bugfix
- Betrifft die Font-Selektion bei
CALCULATECOLUMN
. - Zur Definition des Fonts von Werten, die man mit
CALCULATECOLUMN
berechnet hat, gibt es zwei Methoden, von denen eine allerdings einen Bug hatte:
a) Hat immer funktioniert: Man vergibt einen Font für das Label und erzwingt dessen Weitergabe mittels
INHERITFONT [x]
. In diesem Fall wird neben den
CELLELEMENT
-Font auch der Label-Fontbeeinflusst. Beispiel:
groups kopf1 = | total : 1 eq 1 | code3 : a12 eq 3 | code4 : a12 eq 4 | code5 : a12 eq 5 | code1 usefont "Times-Roman" size 13 : 2 eq 1 | code2 : 2 eq 1 ; inheritfont y = no; inheritfont x = yes; table = kopf1 by a11; CALCULATECOLUMN <1 5> = <1 2> + <1 3>; CALCULATECOLUMN <1 6> = <1 2> - <1 3>;
b) Funktioniert jetzt auch: Man vergibt ein
CELLELEMENT
für das label und definiert einen
USEFONT
für dieses
CELLELEMENT
. Beispiel:
groups kopf2 = | total : 1 eq 1 | code3 : a12 eq 3 | code4 : a12 eq 4 | code5 : a12 eq 5 | code1 cellelements ( physicalrecords ) : 2 eq 1 | code2 cellelements ( physicalrecords ) : 2 eq 1 ; inheritfont y = no; inheritfont x = no; cellelements = columnpercent; usefont physicalrecords = "Times-Roman" size 13; globalcolminimum = 0; table = kopf2 by a11; CALCULATECOLUMN <1 5> = <1 2> + <1 3>; CALCULATECOLUMN <1 6> = <1 2> - <1 3>;
22.9.2016: Bugfix
- Betrifft
COLUMNPERCENT
alsCELLELEMENT
fürSORT
imTABLE
-Statement. - Der Sortieralgorithmus berechnete das
CELLELEMENT COLUMNPERCENT
auf Basis einer nicht korrekt ermittelten Randzelle. - Gefixt!
22.9.2016: neues TABLEFORMAT IDENTCHIQNOSIGNIF
- Wenn man Variablen gegen sich selbst tabelliert und dabei einen
COLCHIQU
-Test mitlaufen lässt, dann sind die Abweichungen in den Zellen in dieser Subtabelle numerisch hochsignifikant, inhaltlich allerdings hoch uninteressant. - Es gab den Kundenwunsch, die Signifikanz-Buchstaben in diesem Fall nicht anzuzeigen.
- In solchen und ähnlichen Konstellationen kann man jetzt die Ausführung der
CHIQU
-Signifikanztests mit dem TableformatIDENTCHIQNOSIGNIF
ausschließen. - Für einen Chi²-Test werden die Zellen zusammengefasst, sodass nur eine 4‑Felder-Tabelle übrig bleibt. Wenn in beiden Zeilen dieser Tabelle eine Zelle gleich der Randverteilung ist (was bedeutet, dass die andere Zelle = 0 sein muss), wird der Signifikanztest unterdrückt.
22.9.2016: Bugfix
- Betrifft die Übergabe von Tellinhalten aus XTAB-Tabellen an GESS ChartFactory.
- Das
POWERCHART
-Statement berechnet die Werte zur Übergabe an PowerPoint selbst. Bei der Ermittlung von Werten fürCELLELEMENTS
, die auf einer Randzelle beruhen, traten sporadisch Fehlberechnungen auf. - Gefixt!
30.8.2016: zusätzliches Encoding bei CSVINFILE
- In UTF‑8 encodierte CSV-Dateien dürfen jetzt auch ein BOM haben.
Syntax:
ENCODING CSVINFILE = UTF8BOM;
- Wenn das aktuelle GESS Q. CSV-Dateien in UTF8BOM schreibt, erleichtert dies die Verwendung von GESS Q.-Daten im CSV-Format mit Excel, da Excel UTF‑8 mit BOM erkennt.
- Ein wesentlicher Vorteil von CSV-Dateien ist ja, dass keine Spaltenfixierung besteht, sodass die variierende physikalische Länge von Zeichen keine Probleme bereitet, und UTF‑8 deshalb universell einsetzbar ist.
29.8.2016: Dokumentationsnachtrag: property NOREPORT
- Eine Variable mit der Property
NOREPORT
wird in der Ausgabe durch report.exe unterdrückt.
Beispiel-Syntax:
NOREPORT sysnum sysdate systime = NO;
5.8.2016: neues CELLELEMENT MINMAX
Syntax:
MINMAX( <variable> )
- Je Zelle werden das Minimum (0‑Perzentil) und das Maximum (100-Percentil) ermittelt.
- Minimal- und Maximalwert werden nacheinander, durch einen Punkt getrennt, ausgegeben.
-
FORMAT MINMAX
wird ausgewertet.
5.8.2016: neue Signifikanzniveaus
Wenn’s der Wahrheitsfindung dient…
- Neue Signifikanzniveaus:
SIGNIF68 SIGNIF32AND10
-
SIGNIF68
ist wieSIGNIF90
ein einfacher Signifikanztest (auf nur einem Level), 68% (bzw. 32%) -
SIGNIF32AND10
ist wieSIGNIF20AND10
ein Signifikanztest auf zwei Level, 32% (minuskel) und 10% (majuskel)
20.7.2016: POSTREPLACE
-
-
- Neue Tabellenoption:
POSTREPLACE
- Neue Tabellenoption:
-
Syntax:
POSTREPLACE <cellelement> : <text1> = <text2> [ IF <text3> ]
- Nachgestellte Option zum
TABLE
-Statement - In der voranstehenden Tabelle werden alle Ausgabezeilen zu dem genannten
CELLELEMENT
daraufhin durchsucht, ob<text1>
in der Ausgabe enthalten ist. Wenn das der Fall ist, wird dieser Text durch<text2>
ersetzt. Der Suchtext<text1>
kann “?” als Wildchar enthalten. Man kann diese Ersetzung mit einer zusätzlicheh Bedingung versehen, dass<text3>
ebenfalls enthalten ist. - Praktisches Beispiel: In einer Tabelle sollen
COLUMNPERCENT
dargestellt werden. In den Spalten aber, in denen die Basis einen Schwellwert unterschreitet, soll stattdessen die absolute Zellenbesetzung ausgegeben werden, und diese soll mit “N=” gekennzeichnet werden. Dieses Problem wird durch eine Kombination ausPOSTPROCESS
undPOSTREPLACE
gelöst:
FORMAT COLUMNPERCENT = '#'; CELLELEMENTS = COLUMNPERCENT; TABLE = #K BY A12; POSTPROCESS COLUMNPERCENT : IF XABS LT 150 THEN SELF = -CELLABS; POSTREPLACE COLUMNPERCENT : "-" = "N=";
- Das Ganze ist natürlich “getrickst”:
POSTPROCESS
ist eine arithmentische Snweisung und kann nur Zahlenwerte beeinfussen. Die arithmetische Eigenschaft “negativ” übersetzt sich allerdings in einen Textbestandteil, ein “-” vor der Zahl. Dies kann man dann für eine Textersetzung nutzen. - Die Aufgabe war einfach, da für
COLUMNPERCENT
ein Darstellungsformat ohne Dezimalzeichen verlangt war. Etwas umfangreicher wird es, wenn ein komplexeres Format gefordert ist:
FORMAT COLUMNPERCENT = '#,#%'; CELLELEMENTS = COLUMNPERCENT; TABLE = #K BY A12; POSTPROCESS COLUMNPERCENT : IF XABS LT 150 THEN SELF = -CELLABS; POSTREPLACE COLUMNPERCENT : ",?%" = "" IF '-'; POSTREPLACE COLUMNPERCENT : "-" = "N=";
-
POSTPROCESS
ist identisch. MehrerePOSTREPLACE
werden in derselben Reihenfolge nacheinander ausgeführt, wie sie in Script stehen. Das erstePOSTREPLACE
lässt das Dezimalzeichen und %-Zeichen verschwinden, unter der Bedingung, dass ein Minuszeichen gefunden wurde. Das zweitePOSTREPLACE
ersetzt wie gehabt das “-” durch “N=”. - Nächste Stufe: wenn zusätzlich die Ausgabe eines Signifikanztests gefordert ist:
CELLELEMENTS = COLPERCANDSIGN; SUPPRESSIFLESS COLPERCT FRAMECELL X ABSOLUTE = 150; ZERODASHCHAR = ' '; TABLE = #K BY A12; POSTPROCESS COLUMNPERCENT : IF XABS LT 150 THEN SELF = -CELLABS; POSTREPLACE COLUMNPERCENT : ".?%" = "" IF '-'; POSTREPLACE COLUMNPERCENT : "-" = "N=";
- Hierzu muss man wissen:
COLPERCANDSIGN
ist eine Textkombination ausCOLUMNPERCENT
undCOLPERCT
. Wenn in den Spalten mit n<150 nur die einfache Häufigkeit als vorzeichenlose und nachkommafreie Zahl stehen soll, dann müssen wir zunächst die Ausgabe des Signifikanztests in den betreffenden Spalten unterdrücken. dazu braucht es einSUPPRESSIFLESS
für
den verwendeten Signifikanztest, in diesem Fall alsoCOLPERCT
. - Wenn ein
CELLELEMENT
mitSUPPRESSIFLESS
unterdrückt wird, steht an der Stelle i.d.r ein ‘-’. das ist derZERODASHCHAR
, der hier dadurch unsichtbar wird, dass wir ihn als Blank darstellen. Der Rest ist bekannt:POSTPROCESS
und 2xPOSTREPLACE
wie oben. - Alternativ zum “Unsichtbarmachen” durch ein Blank im
ZERODASHCHAR
hätte man diesen natürlich auch durch ein weiteresPOSTREPLACE
entfernen können:
POSTREPLACE COLPERCT : "-" = "";
20.6.2016: neue Labeloption CSSCLASS
- Erweiterung der Ausgabe nach HTML
- Analog zu
USEFONT
für PS/PDF-Ausgabe kann man Labels jetzt auch eineCSSCLASS
hinzufügen. Diese wird nur bei der Ausgabe in eine HTML-Datei berücksichtigt. Z.B.:
SINGLEQ q5 = TEXT " Frage 5: Wie gefällt Ihnen Modell XYZ" 20 7 1 LABELS OVERCODE 1:3 "sehr gut/gut" CSSCLASS overcodePos OVERCODE 4:6 "sehr schlecht/schlecht" CSSCLASS overcodeNeg 1 'sehr gut' * 'gut' * 'teils/teils' * 'schlecht' * 'sehr schlecht' ;
- In der CSS-Datei könnten dann für
overcodePos
undovercodeNeg
entsprechende Darstellungen vereinbart werden. z.b. bold und rot bzw. grün als Textfarben.
20.6.2016: Erweiterung CSVINFILE
CSVINALPHA = <namelist>;
- Alternativ zur Kennzeichnung von ALPHA-Variablen mittels “@” im Variablennamen kann man auch eine Liste von Variablennamen angeben. Werden dann im Header eines
CSVINFILE
entsprechende Variablennamen gefunden, werden diese auch ohne “@” als ALPHA-Variablen verarbeitet.
20.06.2016: Bugfix CSVINFILE
- Bei mehreren
CSVINFILE
s konntenMULTIQ/DICHOQ
zuviele atomare Variablen enthalten. Das führte zwar nicht zu falschen Daten, aber zu ineffizienteren Strukturen. - Gefixt!
6.6.2016: Bugfix INSTANTEXCEL
- Negative Zellinhalte (z.b.
MEAN
) wurden an Excel in Stringform übergeben anstelle der üblichen Binärübertragung mit einem Darstellungsformat. Je nach nationaler Einstellung von Excel und des verwendeten Zahlenformats bei der GESS-Tabellenausgabe ergab dies falsche Darstellungen. - Ist gefixt: negative Ergebnisse werden jetzt auch binär übertragen.
2.6.2016: Funktionserweiterung bei OVERVIEW/XOVERVIEW
OVERVIEW ADD = ... XOVERVIEW ADD = ...
-
OVERVIEW
bzw.XOVERVIEW
erzeugen Übersichtstabellen durch eine verborgene Übersetzung inTABLE ADD
-Statements. D.h. der Compiler erzeugt eineTABLE STRUCTURE
und fügt die numerischen Werte durchTABLE ADD
ein. - Dies legte es nahe, die Zählung weiterer Daten in die von
OVERVIEW/XOVERVIEW
erzeugteTABLE STRUCTURE
durchOVERVIEW ADD
bzw.XOVERVIEW ADD
analog zuTABLE ADD
ermöglichen, z.B.:
OVERVIEW = #K BY ABSOLUTE MEAN( A12 A13 A14 ); OVERVIEW ADD = #K BY ABSOLUTE MEAN( B12 B13 B14 );
22.2.2016: neues Ausgabeformat für VARLIST: QST
Syntax:
VARLIST = <Dateipfad> QST;
- Werden die Variablen mit Bezug zu einem spaltenfixierten Datensatz und ihre Verspaltung in einem speziellen QST-Format dargestellt.
22.2.2016: CONTENTKEY-Funktion für CHAPTERPAGE
-
CHAPTERPAGE
ist formal ein Abkömmling des Grundtyps “Tabelle”. - Man kann einer
CHAPTERPAGE
deshalb mit demCONTENTKEY
-Statement auch einen Eintrag für das Inhaltsverzeichnis zuweisen. - Dieser Text wird dann in Inhaltsverzeichnisse übernommen.
22.2.2016: ACROSS und EXCELOUTACROSS
- Neue
TABLEFORMATS
:ACROSS
undEXCELOUTACROSS
- Für Nutzer, die nicht davon lassen können, ihre Charts von Hand aus Excel-Tabellen abzuleiten, gibt es jetzt die Möglichkeit, die einzelnen
CELLELEMENTS
nebeneinander anstatt des GESS-Standards untereinander anordnen zu lassen. - Das Tableformat
EXCELOUTACROSS
beschränkt diesen Umbau auf die Ausgabe inEXCELOUT AS/VIA HTML
. - Mit dem allgemeineren
ACROSS
werden auch dieCELLELEMENTS
in PS-und PDF-Ausgaben nebeneinander dargestellt.
11.2.2016: UNIXTIME und CURRENTMILLIS
- Neue
TIME
-Funktionen:UNIXTIME
undCURRENTMILLIS
- Für Berechnungen von verstrichener Zeit im zusammenhang mit GESS Q.-Files fehlte eine praktische Form der aktuellen Uhrzeit in der Form von Sekunden (
UNIXTIME
) oder Millisekunden (CURRENTMILLIS
) seit 1970 (Unix epoch). - Wie
TIME
sind dies Funktionen innerhalb arithmetischer Berechnungen, z.B.:
COMPUTE myUNIXTIME = UNIXTIME( 0 ); COMPUTE myCURRENTMILLIS = CURRENTMILLIS( 0 );
- Das Resultat entspricht der von Windows gelieferten lokalen Zeit.
8.2.2016: PUSHSTARTCOLUMN und POPSTARTCOLUMN
- Neues Statements:
PUSHSTARTCOLUMN
undPOPSTARTCOLUMN
- Die GESS-Produkte erzeugen automatisch während des Interpretierens des Scripts eine zusammenhängende Verspaltung im Datensatz. Wenn man nun zwischen Frage 1 und Frage 2 eine zusätzliche Frage einbauen will, darf diese die einmal verwendete Verspaltung nicht verändern.
Aus:
Singleq Frage1 = … * Singleq Frage2 = … *
Soll werden:
Singleq Frage1 = … * Singleq Zusatzfrage1 = … MultiQ Zusatzfrage2 = … * Singleq Frage2 = … *
- Am elegantesten geht das mit einem Stack. GESS kennt jetzt einen Stack der als nächstes zu verwendenden Spalte.
- Mit einem Push definiert man einen neuen Anfangswert für die folgenden Fragen, mit dem folgenden Pop wird die Verspaltungsumgebung auf den Zustand vor dem Push zurückgesetzt.
Singleq Frage1 = … * PushStartColumn = 500; SingleQ Zusatzfrage1 = … * MultiQ Zusatzfrage2 = … * PopStartColumn; Singleq Frage2 = … *
- Dies gilt für alle spaltenbezogenen Fragetypen: SingleQ, SingleQ Alpha, MultiQ und DichoQ.
- GESStabs kennt diesen Mechanismus genauso und errechnet die Herkunftsspalten analog.
27.1.2016: Bugfix DICHOQ NOINPUT
- Das
DICHOQ
hat zwar die EigenschaftNOINPUT
syntaktisch akzeptiert, in der Folge aber in einem GESS Cati-Script die Frage trotzdem zum Input dargestellt. - Ist jetzt gefixt. z.b.:
DICHOQ dichobula = NOINPUT 220 '1' * '2' * '3' * '4' * '5' * '7' * '6' * '8' * '9' * '10' * '11' * '12' * '13' * '14' * '15' * '16' EQ 1; COMPUTE LOAD dichobula = bula;
- Würde die Information bula als dichotome Variable mit 16 mal 0/1 ab Spalte 220 im Ausgabedatensatz darstellen, aber nicht abfragen.
27.1.2016: Erweiterung für SINGLEQ
- Im
SINGLEQ
‑Statement kann man jetzt auch die eigenschaftNOINPUT
angeben. z.b.:
SINGLEQ Nachname = ALPHA NOINPUT 200 20;
- Eine solche Variable hätte in einem GESS Cati-Script die Eigenschaften eines Ausgabebereichs im Datensatz, würde aber nicht im schirm zur abfrage vorgelegt.
- Für diesen Zweck wurde bislang immer die altehrwürdige Form
VARNAME
verwendet. Für neue Benutzer ist das schwer zu vermitteln.
27.1.2016: MAKESINGLE
Erweiterung:
MAKESINGLE <newvar> = ALPHA;
- Zusätzlich zu den Syntaxvarianten:
MAKESINGLE <newvar>; MAKESINGLE <newvar> [ = <arithm.expression> ];
- Gibt es jetzt eine zusätzliche Variante:
MAKESINGLE <newvar> = ALPHA;
- Hierbei wird eine neue leere
SINGLEQ
mit der EigenschaftALPHA
erzeugt.
22.1.2016: CITEFIRSTVAR/CITEALLVARS bei OVERVIEW/XOVERVIEW
- Im Zusammenhang mit
OVERVIEW
oderXOVERVIEW
läuft die automatische Zitierung von Variablentexten ins Leere, da dieCONTROLVAR
, die die Grundlage der Zitierung ist, in beiden Fällen eine synthetische Variable unbekannten Namens ist, die während der Interpretation des OVERVIEW-Statements erst gebildet wird. Daher kann man dieser Variablen auch keinen Text zum Zitieren beigeben. - Die Verarbeitung der
OVERVIEW
-Statements ist jetzt so erweitert, dass der Vartext der ersten Variablen in der Variablenliste der internen synthetischen Variable zugefügt wird. - Langer Rede, kurzer Sinn:
CITEFIRSTVAR
und Konsorten funktionieren in diesem Zusammenhang jetzt auch.
22.1.2016: Interpretation von OPENQ-Files
- Historisch gewachsen: Um die Arbeit mit
OPENQ
-Files zu vereinfachen, gab es die Konvention, kurze Zeilen kurzerhand auszuschließen und kommentarlos nicht zu verarbeiten. OPENQ-Files mit weniger als 10 Zeichen galten als Schrott. Von GESS produzierteOPENQ
-Files sind immer länger. - Man kann dieses Format aber natürlich auch anders nutzen und da sind Kunden an diese Untergrenze gestoßen:
OPENQ
-Zeilen mit weniger als 10 Zeichen sind dabei untergegangen. - Da
OPENQ
-Files oft nach Bearbeitung in Editoren oder Tabellenkalkulationsprogrammen Schrott-Zeilen enthalten, ist dieser Mechanismus grundsätzlich erhaltenswert. - Die Untergrenze von 10 Zeichen ist aber wohl zu klein, wenn einstellige Variablennamen, einstellige Fallnummern und einstellige Codes verwendet werden.
- Die kürzest mögliche
OPENQ
-Zeile dürfte sein:
- Das macht minimal 7 Zeichen. Wenn die Files außerhalb von GESS erzeugt werden, mag auch das Trennzeichen nach dem Code fehlen, also minimal 6 Zeichen.
- Zeilen werden nur noch dann geschrottet, wenn sie weniger als 6 Zeichen enthalten.
22.1.2016: Neues CELLELEMENT: PHI
- Der 4‑Felder-Phi-Koeffizient misst den Zusammenhang zwischen Ausprägungen.
- Dieses
CELLELEMENT
dürfte nur in speziellen Fällen sinnvoll sein, entsprach aber einem Kundenwunsch. - Wenn man Mehrfachnennungsvariablen tabelliert, kann man die einzelnen Ausprägungen ja als unabhängige 0/1‑Variablen betrachten. Damit eröffnet sich die Möglichkeit, die zugrunde liegende 4‑Felder-Tabelle zu rekonstruieren, und auf dieser Basis den Koeffizienten zu bestimmen.
- Ein Beispiel: Wenn Befragte mehrere Nennungen für Entscheidungsgründe abgeben können, dann kann man diese Variable gegen sich selbst tabellieren. Den Phi-Koeffizienten kann man dann als den Zusammenhang zwischen den Gründen interpretieren: Ein negativer Koeffizient z.b. würde anzeigen, dass die Befragten, die Grund A genannt haben, seltener Grund B angeben. usw..
4.1.2016: Neues CELLELEMENT: SPACE
Syntax:
SPACE( <variable > )
- Die Aufgabe von
SPACE
(es könnte auchEMPTY
heißen) ist lediglich, eine leere Zelle zu produzieren. - Diese wiederum werden u.U. benötigt, um leere Zeilen bzw. Spalten in Tabellen für PowerPoint zu erzeugen.
Für Neuigkeiten aus 2015 und früher, siehe READ.ME!