OpenQ-Files

<< Click to Display Table of Contents >>

Navigation:  Daten und Datensatz > In- und Output von Datensätzen >

OpenQ-Files

OpenQ-Files sind Textdateien, die die Daten offener Fragen (SingleQs mit der Eigenschaft OPEN oder ALPHA) beinhalten. Sie können mit jeder Art von Dateninput verwendet werden und stellen (ähnlich wie ASSOC-Files) eine zusätzliche Datenquelle dar.

Grundsätzlich können Variablen mit offenen Nennungen aber auch in jedem anderen Datensatzformat (Ausname: ASCII) mitgeführt werden.

Im Gegensatz zu manch anderem Datenformat hat ein OpenQ-File keinerlei Längen-Begrenzungen der Alpha-Variablen. Der Vorteil eines OpenQ-Files offenbart sich zudem häufig im Zuge inhaltlicher Codierungen, für die sich eine separate Auflistung der offenen Nennungen als dienlich erweist.

OpenQ-Files werden mit dem OPENQFILE-Statement eingebunden und mit einem KEY bzw. FILEKEY mit der/den zugrundeliegenden Datenquelle/n verknüpft.

Bisher nicht definierte Variablen, die im OpenQ-File referenziert werden, können mittels OPENAUTOGENERATE automatisch erzeugt werden. Zur Weiterverarbeitung der OpenQ-Files können  optionale Formateinstellungen vorgenommen werden.

Zum Encoding von OpenQ-Files siehe EnforceUTF8InOpenQFile.


OpenQFile

Syntax:

OPENQFILE = <name.opn>;

Es können beliebig viele OpenQ-Files eingelesen werden. GESStabs liest alle angegebenen OpenQ-Files und legt eine interne Datenbank an, welche Werte welchen Fallnummern zuzuordnen sind.

Key

Zur Verknüpfung der OpenQ-Daten mit den Daten aus anderen Datensatz-Quellen muss eine Schlüsselvariable angegeben werden. Diese wird mit KEY angegeben.

Syntax:

KEY OPENQFILE = <varname> ;

In der Regel wird hierzu die CASENUMBER verwendet; man kann aber beliebige Variablen als Schlüssel in OpenQFiles verwenden. Diese Variable muss atomar sein; darf aber auch vom Typ ALPHA sein.

Achtung: Werden mehrere OPENQFILE mit verschiedenen Schlüsseln verwendet, muss man darauf achten, dass keine Variable in zwei OPENQFILEs mit unterschiedlichen KEYs auftritt. Jede OPEN-Variable kann nur mit einem Schlüssel verknüpft sein. Das Programm überwacht, ob einer OPEN-Variable dadurch unterschiedliche Schlüssel zugeordnet werden, dass sie in auch in anderen OPENQFILEs mit abweichendem KEY auftaucht. In den 'Messages' der GESStabs-Oberfläche wird ein Warntext ausgegeben, dass der KEY nicht verändert werden darf. Es wird dringend dazu geraten, diesen Warnungen nachzugehen, denn aus dieser Situation können inhaltliche Fehler in der Auswertung entstehen.

FileKey

FILEKEY bietet eine komfortable Lösung für ein Spezialproblem, das vor allem bei mehrjährigen Befragungswellen auftritt: als Schlüssel dienen IDs, die über mehrere Wellen mehrfach auftreten können, z.B. eine PersonenID aus einem Panel. Mehreren Ursprungsdatensätzen sind dann auch mehrere Datensätze mit offenen Antworten zuzuordnen. Auch in den Daten in OPENQFILEs sind dann dieselben IDs mehrfach vorhanden und erlauben allein keine sichere Zuordnung.

Der Mechanismus ist extrem einfach: zu einer Ursprungsdatei, die einen FILEKEY besitzt, wird Zusatzinformation nur aus OPENQFILEs zugeordnet, die denselben FILEKEY tragen.

Syntax für die Ursprungsdateien:

CSVINFILE  [ FILEKEY <key> ] [ <delimchar> ] = <filepath>;
DATAFILE  [ FILEKEY <key> ] [ ALLOWEMPTY ] = <filepath>;
SPSSINFILE  [ FILEKEY <key> ] = <filepath>;

Syntax für die Schlüsselbasierten Zusatzdateien:

 (Ggf.: KEY OPENQFILE = panelID;)
 OPENQFILE [ FILEKEY <key> ] [ ALLOWEMPTY ] = <filepath>;

Zu ALLOWEMPTY: Im Default ü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.

Beispiel:

In allen folgenden Ursprungsdatensätzen, hier in Form von CSVINFILEs, gibt es eine Schlüsselvariable 'panelID'. In den drei Klassen von Dateien before2016, 2016, 2017 tritt dieser Schlüssel jeweils nur einmal auf, über diese Klassen hinweg aber mehrfach:

CSVINFILE FILEKEY before2016 = "..\DATA2014\data.csv";

CSVINFILE FILEKEY before2016 = "..\DATA2015\data.csv";

CSVINFILE FILEKEY 2016 = "..\DATA2016\data.csv";

CSVINFILE FILEKEY 2017 = "..\DATA2017\data.csv";

In diesen folgenden Dateien, sind die einzelnen Datensätze über 'panelID' indiziert. Hier gilt dasselbe, innerhalb der Klassen ist der Schlüssel panelID eindeutig, über die Wellen hinweg nicht. Über die FILEKEY-Komponente der File-Statements kann GESStabs die Informationen nun korrekt zuordnen.

KEY OPENQFILE = panelID;

OPENQFILE FILEKEY before2016 = "..\OPEN2014\opn.*";

OPENQFILE FILEKEY before2016 = "..\OPEN2015\opn.*";

OPENQFILE FILEKEY 2016 = "..\OPEN2016\opn.*";

OPENQFILE FILEKEY 2017 = "..\OPEN2017\opn.*";


OpenAutoGenerate

Werden in einem OpenQ-File Variablen referenziert, die nicht im Skript definiert sind, dann können diese Variablen erzeugt werden.

Syntax:

OPENAUTOGENERATE = [ YES | MULTIQ <number> [ PREFIX <text> ] ] 
| ALPHA [ PREFIX <text> ] ];

Die einfachste Version lautet: 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 Mehrfachnennungsvariable 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 OpenQ).

Zum Beispiel:

OPENAUTOGENERATE =  MULTIQ 5;

Das Prefix kann im Statement explizit angegeben werden, bspw.:

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, z.B.:

OPENAUTOGENERATE = ALPHA;

Zusätzlich kann eine 'echte' ALPHA-Variable generiert werden, indem man einen von default "" abweichenden Prefix definiert, etwa:

OPENAUTOGENERATE = ALPHA PREFIX "alpha";

Um auf die mit OPENAUTOGENERATE generierten Variablen zugreifen zu können (z.B. zwecks Tabellierung), müssen diese in einem kleinen Umweg zunächst via SPSSOUTFILE oder INVERTOUT exportiert werden.

Zum Hintergrund dafür ist es 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 OpenQ-Files haben im Ablauf von GESStabs eine Sonderstellung, denn deren Inhalte müssen ja während des Einlesens der Daten (mittels 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 auch 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-File oder invertiertes GESS-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.)


Formateinstellung für OpenQ-Files

Zur Weiterverarbeitung der OpenQ-Files können für sie Formateinstellungen vorgenommen werden.

Zwei verfügbare Formatoptionen liefern folgende Einstellungen:

Das ursprüngliche OpenQFormat ist heutezutage nicht mehr relevant.

NewOpenFormat

Syntax:

NEWOPENFORMAT = [ YES | NO ];

Elemente im OpenQ-File werden bei YES durch Tabstopp getrennt (ähnlich wie in CSV-Dateiformat).

 
OpenCSV

Syntax:

OPENCSV = [ YES | NO ];

Analog zur deutschen Voreinstellung in MS Office Excel werden die Elemente im OpenQ-File bei YES durch Semikolon getrennt.


Encoding

Zum Encoding von OpenQ-Files, siehe EnforceUTF8InOpenQFile.