CSV

<< Click to Display Table of Contents >>

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

CSV

GESStabs kann Datensätze in CSV-Dateiformat

einlesen: beliebig viele Datenfiles, deren Struktur nicht identisch sein muss

verarbeiten: Namenskonventionen erlauben einfache Erzeugung von Mehrfachnennungs- und Alpha-Variablen

ausgeben: mit Mechanismen zur Anpassung der Daten an CSV-Konventionen


Daten-Input

CSVInfile

Einlesen eines Datensatzes in CSV-Dateiformat

Syntax:

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

Synonym: DELIMITEDIN

Der Inhalt der ersten Zeile der eingelesenen CSV-Datei wird als Variablennamen-Liste interpretiert.

Die folgende, als CSVINFILE eingelesene Datei,

Eingelesene CSV-Datei

Eingelesene CSV-Datei

erzeugt vier Variablen: testq1, testq2, testq4 und testq5.

In einem GESStabs-Lauf können beliebig viele solcher Dateien verarbeitet werden. Würde anschließend eine zweite Datei

Zweite eingelesene CSV-Datei

Zweite eingelesene CSV-Datei

eingelesen werden, so erkennt die Software, dass hier dieselben Variablen eingelesen werden sollen. Die Reihenfolge der Spalten ist unerheblich. Die Variablen haben GESStabs-intern eine Reihenfolge, die sich daraus bestimmt, in welcher Reihenfolge sie erzeugt wurden. Die Reihenfolge bleibt also testq1, testq2, testq4, testq5, da das Einlesen der zweiten Datei keine neuen Variablen hinzufügt.

In weiteren Files können aber durchaus neue Variablen hinzugefügt oder Variablen ausgelassen werden. Es wird noch eine dritte Datei eingelesen:

Dritte eingelesene CSV-Datei

Dritte eingelesene CSV-Datei

Diese Datei enthält fünf Spalten. Daraus erzeugt GESStabs folgerichtig fünf atomare Variablen. Außerdem sind die Spalten zu zuvor eingelesenen Variabkeb (testq1, testq2 und testq4) nicht vorhanden. Das bewirkt, dass diese Variablen in den Fällen, die aus der dritten Datei gelesen werden, auf MISSING gesetzt werden.  

FILEYKEY erlaubt die ausgewählte Zuordnung verschiedener Datensätze (mehrere CSVINFILEs, OPENQFILEs und ASSOCFILEs) über mehrere Befragungswellen hinweg (siehe OPENQFILE).

Zu ALLOWEMPTY:  Wird ein CSVINFILE mit ALLOWEMPTY gekennzeichnet, ist es erlaubt, dass diese Datei nicht existiert. Tritt dieser Fall ein, wird dies in den 'Messages' vermerkt.

Wenn man mehrere Dateien einliest, kann man überwachen, welche Variablen aus welcher Datei gelesen werden. Das Befehlsschlagwort dazu lautet CSVINPROTOCOL.


Handhabung von CSV-Daten

Die aus CSV-Dateien erzeugten Variablen sind "nackt". Sie haben einen Namen, Strukturinformationen (siehe unten) und Werte. Sie haben vieles nicht: keinen VARTITLE, keinen TEXT, keine LABELS, keine Filter. Grundsätzlich kann man diese Informationen mit den Standardstatements (VARTITLE, TEXT, LABELS - siehe Variableneigenschaften) hinzufügen.

Markieren von Variablentypen

GESStabs hält ein robustes Verfahren bereit, um Variablen und deren Inhalte aus CSV zu lesen und in CSV zu speichern, und dabei die GESS-Variablentypen ALPHA, MULTIQ und DICHOQ zu definieren. Das Vorgehen ist denkbar einfach und besteht lediglich in der Modifikationen der Variablennamen. Diesen wird (je nach Variablentyp) ein Präfix vorangestellt, und zwar:

@ für Text-Variablen (Alpha)

@M für Multi-Variablen (MultiQ)

@D für dichotome Variablen (DichoQ)

Findet GESStabs also im Datensatz Variablen, denen eine dieser Kürzel vorangestellt ist, entnimmt das Programm daraus die Information über den Variablentyp. Zur weiteren Verarbeitung wird der Stammname automatisch identifiziert und anschließend mit diesem reduzierten Variablennamen weitergearbeitet.

Alpha-Variablen

Aus der Variable "@testq1" zieht GESStabs aufgrund des vorangestellten "@" die Information, dass es sich um eine Alpha-Variable handelt, und führt die Variable anschließend unter dem Variablennamen "testq1" zur Weiterverarbeitung in GESStabs.

Alternativ zur Kennzeichnung von ALPHA-Variablen mittels "@" im Variablennamen kann man mit CSVINALPHA auch eine Liste von Variablennamen angeben.

Syntax:

CSVINALPHA = <namelist>;

Werden dann im Header eines CSVINFILE entsprechende Variablennamen gefunden, werden diese auch ohne vorangestellten "@" als ALPHA-Variablen verarbeitet.

Multi-Variablen

Zusammengehörige Multi-"Teilvariablen" können neben dem Präfix "@M" mit einer Seriennummer (_[x]) gekennzeichnet werden. Infolgedessen erkennt GESStabs zusammenhängende Variablen und fasst diese zur Weiterarbeit als Mehrfachnennungsvariable zusammen.

Einem "$M" entnimmt GESStabs, dass es sich um eine VARFAMILY bzw. MULTIQ handelt; also eine Variable, die eine 1., 2., 3. Nennung kennt. GESStabs erkennt im oben stehenden dritten eingelesenen CSV-Datensatz anhand der Variablennamen-Endungen auch, dass die drei Spalten D bis F zusammengehören. Hier wird nicht nur der »Namensstamm« isoliert und am Wortbeginn die Typkennzeichnung ($M) entfernt, sondern auch am Ende die Serienkennung (_1, _2, _3, _4). Es bleibt der Stammname »multi«, und unter diesem Namen ist diese Mehrfachnennungsvariable anschließend bekannt.

Mit MODIFYCSVNAMES können in GESStabs-Projekten Multivariablen mit Variablennamen, die auf eine Ziffer enden, automatisch in die CSV-kompatible Form gebracht werden.

Syntax:

MODIFYCSVNAMES = [ YES | NO ];

Setzt man diesen Schalter auf YES, dann werden alle Variablennamen in der Kopfzeile der CSV-Datei so modifiziert, dass sie mit den Einlesealgorithmen von CSVINFILE korrespondieren.

Zum Beispiel: Wird eine VarFamily namens f2 mit CSVOUTFILE exportiert, werden daraus die Einzelvariablen "$Mf2_1"; "$Mf2_2"; "$Mf2_3"; "$Mf2_4"; "$Mf2_5"; "$Mf2_6"; "$Mf2_7"; "$Mf2_8"; "$Mf2_9"; "$Mf2_10" usw. gebildet. Diese Variablen würden beim Einlesen der CSV-Datei mit CSVINFILE wieder zu einer VarFamily mit dem Mamen f2 zusammengefasst.

Der Underscore in $Mf2_1 wird genau dann angefügt, wenn der letzte Buchstabe des Variablennamens wie bei f2 eine Ziffer (0 bis 9) ist. CSVINFILE entfernt genau einen Underscore, wenn dieses Zeichen der letzte Buchstabe des Variablennamens ist.

Dichotome Variablen

Analog zur Handhabung von Multivariablen verhält es sich mit dichotomen Variablen (0/1-Variablen). Hier lautet die Kennzeochnung lediglich "$D":

Dichotome Variablen in CSV

Dichotome Variablen in CSV

In den vier Spalten A bis D findet GESStabs die vier atomaren Variablen dicho vpm Typ DICHOQ.

Umgang der Software mit den (vor-)definierten Variablentypen

Wenn ein Dateninput via CSVINFILE angefordert wird, schaltet GESStabs in einen speziellen Interpretationsmodus bei den anschließenden Statements VARIABLE, VARIABLES, MULTIQ und DICHOQ-Statements. Im normalen Interpretationsmodus erzeugen diese Statements neue Variablen, und es dürfen noch keine Variablen dieses Namens existieren. Im CSVINFILE-spezifischen Interpretationsmodus kehrt sich diese Prüfung um: es darf bereits eine Variable dieses Namens existieren. Der Variablentyp muss dann dem entsprechen, was aus dem CSV-File entnommen wurde.


Daten-Output

CSVOutfile

Ausgabe eines Datensatzes in CSV-Format

Syntax:

CSVOUTFILE = <name>;

<name> kann ein vollständiger Pfad oder nur ein Dateiname sein. Die Datei-Extension wird automatisch auf 'CSV' gesetzt.

StoreToCSV

Optionale Angabe der via CSVOUTFILE zu exportierenden Variablen

Syntax:

STORETOCSV = [ ALL | <varlist> ];

Die als <varlist> deklarierten Variablen werden in der Reihenfolge ihrer Angabe in den neuen Datensatz exportiert.

Wird das Statement ausgelassen oder ALL angegeben, werden alle bekannten Single-, Multi- und dichotomen Variablen in die Liste der zu exportierenden Variablen eingetragen, wenn sie nicht als Systemvariablen gekennzeichnet sind.

NoCSV

Exportverbot für definierte Variablenliste

Syntax:

NOCSV <varlist> = YES;

Die Variablen in der angegebenen variablenliste werden als nicht im CSVOUTFILE zu exportieren gekennzeichnet. Dieses Exportverbot gilt auch dann, wenn sie im STORETOCSV-Statement explizit angesprochen wurden.

CSVWeight

Ausgabe einer Gewichtungsvariable im CSVOUTFILE

Syntax:

CSVWEIGHT = <varname>;

Unter dem angegebenen Namen wird eine Gewichtungsvariable ins auszugebende CSV-File exportiert. Besteht ein systemgewicht, z.B. aufgrund einer iterativen Gewichtung (als Resultat von WEIGHTCELLS oder als USEWEIGHT), wird dieser Wert exportiert.

Format-technische Vorbereitung des CSV-Outputs

1) Das Encoding der Ausgabedatei kann wie folgt festgelegt werden:

Syntax:

ENCODING CSVOUTFILE = [ ANSI | UTF8 ];

2) Das Einschließen von Texten in Anführungszeichen in CSV-Dateien ausschalten:

Syntax:

NOQUOTESINCSV = [ YES | NO ];

Voreinstellung: NO

3) Zur Weiternutzung des CSV-Outputs in Excel sollte als Trennzeichen ein Komma gesetzt werden:  

ASCIIOUTDECIMALCHAR = ",";

Dass hier das Statement zur Trennzeichen-Definition für den ASCII-Datenoutput genutzt wird, ist historisch bedingt.

CSVSpecial

Ausgabe von Tabellenergebnissen in Daten-Format

Syntax:

CSVSPECIAL = <filepath>;

Kombiniert man COMPUTE CONCAT und CSVSPECIAL, kann man aus GESStabs-Tabellen Datensätze für weitergehende Analysen (z.B. in TABLEAU) erzeugen: Das COMPUTE CONCAT-Statement macht es einfach, die Kombinationen mehrerer Variablen in einer Alpha-Variablen zusammenzufassen, und mit CSVSPECIAL kann man die Ergebnisse aus Tabellen zur Weiterverarbeitung mit anderer Software zur Darstellung aufbereiten.

Ein Beispiel: Gegeben seien eine oder mehrere Variablen, deren Mittelwerte (oder andere Maßzahlen) in Abhängigkeit von mehreren kategorialen Variablen berechnet werden sollen. Um diese kategorialen Variablen simultan in die Tabellierung einzuführen, werden sie in eine Alpha-Variablen abgebildet. Die Ausprägungen dieser neuen Variablen sind alle in den Daten auftretenden Kombinationen der Ausgangsvariablen. Die Ausgangsvariablen können Alpha-Variablen sein, müssen sie aber nicht; wenn vorhanden, wird immer der Labeltext verwendet. Diese so gebildete Variable wird dann in der Vorspalte gegen die gewünschten Maßzahlen tabelliert, und die entstehende(n) Tabelle(n) im CSVSPECIAL-Format exportiert.

Im entstehenden CSV-Export sollen die einzelnen Labeltexte getrennt als Spalten ausgegeben werden. Hierfür müssen die in einem String zusammengefassten Eigenschaften zur Ausgabe wieder in die einzelnen Elemente zerlegt werden. Die CSVSPECIAL-Konvention sieht vor, dass die einzelnen Bestandteile in der entstehenden Alpha-Variablen mittels "|" gekennzeichnet sind. An diesen Stellen wird der Inhalt dann beim Export in einzelne Spalten aufgetrennt. Wenn man also die Mittelwerte der zwei Indizes i1 und i2 für weitere Analysen nach den vier Randvariablen ausgeben möchte, dann erzeugt man folgende Tabelle und exportiert sie im CSVSPECIAL-Format:

CSVSPECIAL = myspecial.csv;

COMPUTE CONCAT gruppen = Land|Produkt|Geschlecht|Alter;

TABLE = MEAN( i1 ) MEAN( i2 ) BY gruppen SORT ALPHA;

Das Ergebnis in der CSVSPECIAL-Datei sieht dann so aus:

"Dänemark";"Creme";"männlich";"unter 18";6;48,1666666667;51,8333333333

"Dänemark";"Creme";"weiblich";"18 bis unter 50";11;58,1818181818;40,6363636364

"Dänemark";"Creme";"weiblich";"50 und älter";3;57,0000000000;7,6666666667

"Dänemark";"Lotion";"männlich";"unter 18";12;60,5000000000;56,9166666667

"Dänemark";"Lotion";"weiblich";"18 bis unter 50";20;53,2000000000;56,2000000000

"Dänemark";"Lotion";"weiblich";"50 und älter";7;61,1428571429;59,8571428571

"Dänemark";"Salbe";"männlich";"unter 18";9;63,4444444444;58,4444444444

"Dänemark";"Salbe";"weiblich";"18 bis unter 50";12;57,5833333333;55,7500000000

"Dänemark";"Salbe";"weiblich";"50 und älter";14;62,6428571429;53,2857142857

"Schweden";"Creme";"männlich";"unter 18";10;56,3000000000;24,6000000000

"Schweden";"Creme";"weiblich";"18 bis unter 50";11;61,8181818182;40,9090909091

"Schweden";"Creme";"weiblich";"50 und älter";8;68,5000000000;66,0000000000

"Schweden";"Lotion";"männlich";"unter 18";12;46,5000000000;44,8333333333

"Schweden";"Lotion";"weiblich";"18 bis unter 50";13;63,9230769231;51,3076923077

"Schweden";"Lotion";"weiblich";"50 und älter";11;64,5454545455;60,3636363636

"Schweden";"Salbe";"männlich";"unter 18";9;69,7777777778;57,6666666667

"Schweden";"Salbe";"weiblich";"18 bis unter 50";13;52,7692307692;55,7692307692

"Schweden";"Salbe";"weiblich";"50 und älter";8;58,1250000000;61,5000000000

"Schweiz";"Creme";"männlich";"unter 18";5;27,8000000000;42,0000000000

"Schweiz";"Creme";"weiblich";"18 bis unter 50";10;41,9000000000;44,7000000000

"Schweiz";"Creme";"weiblich";"50 und älter";4;25,0000000000;31,2500000000

"Schweiz";"Lotion";"männlich";"unter 18";13;23,9230769231;50,1538461538

"Schweiz";"Lotion";"weiblich";"18 bis unter 50";9;56,5555555556;59,6666666667

"Schweiz";"Lotion";"weiblich";"50 und älter";7;44,7142857143;51,8571428571

"Schweiz";"Salbe";"männlich";"unter 18";5;8,4000000000;68,2000000000

"Schweiz";"Salbe";"weiblich";"18 bis unter 50";10;37,1000000000;55,2000000000

"Schweiz";"Salbe";"weiblich";"50 und älter";9;39,7777777778;47,7777777778

Verarbeitung von MISSING

Wenn die kategorialen Variablen aus numerischem Input stammen, die Variable MISSING ist, und bei der Beschreibung der Labels AUTONOANSWER gesetzt ist, dann wird der in AUTONOANSWER vereinbarte Text Bestandteil der zusammengesetzten Alpha-Variable. Steht AUTONOANSWER auf NO, dann wird ein leerer String eingefügt; in der Excel-Ansicht ergibt das eine leere Zelle.

Ausgabedatei(en)

Erzeugt man mehrere Tabellen hintereinander, werden diese als Default ohne Unterbrechung in dieselbe Datei ausgegeben. Das kann natürlich nur solange sinnvoll funktionieren, wie die zusammengesetzten Variablen strukturell gleich sind, also aus denselben Basisvariablen zusammengesetzt sind. Das CSVSPECIAL-Statement kann aber auch mehrfach abgesetzt werden. Wenn weitere CSVSPECIAL-Statements mit abweichenden <filepath>-Befehlen im Skript angegeben werden, werden die Tabellen, die nach dem neuerlichen CSVSPECIAL stehen, in die neue Datei ausgegeben.

Man kann also schreiben:

CSVSPECIAL = gruppen1.csv;

TABLE = MEAN( mmm ) MEAN( mmm2 ) by gruppen SORT ALPHA;

CSVSPECIAL = gruppen2.csv;

TABLE = MEAN( mmm ) MEAN( mmm2 ) by gruppen SORT ALPHA;

Es muss nicht immer MEAN SUM o.ä. sein, man kann natürlich auch Variablenausprägungen tabellieren:

COMPUTE CONCAT gruppen3 = Method|Land|Produkt|Alter;

CSVSPECIAL = gruppen3.csv;

CELLELEMENTS = ROWPERCENT;

TABLE = geschlecht BY gruppen3 SORT ALPHA;

Die Zeilen des Resultats sehen dann etwa so aus:

"CATI";"Schweiz";;"18 bis unter 50";4;0 %;100 %

"CATI";"Schweiz";;"50 und älter";3;0 %;100 %

"CATI";"Schweiz";;"unter 18";3;67 %;33 %

"face-to-face";"Dänemark";"Creme";"18 bis unter 50";6;17 %;83 %

"face-to-face";"Dänemark";"Creme";"50 und älter";3;33 %;67 %

"face-to-face";"Dänemark";"Creme";"unter 18";4;0 %;100 %

"face-to-face";"Dänemark";"Lotion";"18 bis unter 50";14;14 %;86 %