Assoziierte Datensätze

<< Click to Display Table of Contents >>

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

Assoziierte Datensätze

Mit dem ASSOCFILE-Statement können Datensätze, die mit anderen eingebundenen Datensätzen (z.B. in SPSS- oder CSV-Dateiformat - im Folgenden mit DATAFILE bezeichnet) assoziiert sind, ergänzend in das GESStabs-Projekt eingebunden werden. ASSOCFILEs sind einzeilige spaltenfixierte ASCII-Datensätze, deren Inhalt über ASSOCVAR-Statements erschlossen wird.

Assoziierte Datensätze werden mit dem ASSOCFILE-Statement eingebunden und bei Bedarf mit einem FILEKEY mit den zugrundeliegenden Datensätzen verknüpft, der Vorgang wird mit ASSOCEND beendet. Mit ASSOCVAR können neue, ergänzende Variablen erzeugt werden.

Mit ASSOCTOINVERT können Inhalte aus ASSOC-Files gezielt in invertierte Datensätze übernommen werden. Ein alternatives Vorgehen dazu bietet die kombinierte Anwendung von INVERTIN und ASSOCFILE.


AssocFile

Syntax:

ASSOCFILE = <filename> KEY <varname> <startcol> <len> ;

Voraussetzung für die Ansprache eines assoziierten Datensatzes mittels ASSOCFILE ist die Existenz eines gleichlautenden numerischen Schlüssels im DATAFILE (zuvor eingebundener Datensatz) und in jedem ASSOCFILE.  '<startcol>' und '<len>' bezeichnen Position und Länge des Schlüsselfeldes im ASSOCFILE. KEY <varname> bezeichnet eine Variable im DATAFILE, die für jeden Fall die Schlüsselinformation enthält. Identische Schlüssel dürfen sowohl im DATAFILE als auch im ASSOCFILE auftauchen.

In der Sprechweise der Mehrebenenanalyse kann man damit sowohl übergeordnete als auch untergeordnete Ebenen einführen. In der Sprechweise relationaler Datenbanken kann man sowohl 1:1, 1:n, n:1 als auch n:m Abbildungen einführen.

Datenquellen

'Basis'-Datensätze in SPSS- und CSV-Format werden mit assoziierten Datensätzen wie folgt gehandhabt:

CSV

Syntax:

ASSOCFILE CSV = <filename> KEY <key1> <key2> ;
ASSOCEND <filename> ;

Siehe Spezielle Optionen zum einfachen Import weiterer Variablen aus CSV-Datensätzen.

SPSS

Syntax:

ASSOCFILE SPSS = <filename> KEY <key1> <key2> ;
ASSOCEND <filename> ;

Zu den Bestandteilen

key1: Variablenname des Schlüssels im bestehenden Datensatz

key2: Variablenname des Schlüssels im ASSOCFILE

Die beiden Schlüsselvariablen müssen unterschiedliche Namen haben.

ASSOCEND: siehe unten

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 ASSOCFILEs sind dann dieselben IDs mehrfach vorhanden und erlauben allein keine sichere Zuordnung.

Syntax:

ASSOCFILE [ FILEKEY <filekey> ] [ BIG DBASEIN SPSS ] = 
<filename> KEY <keyvar> [ <start> <len> ] | [ keyField ] ;

Für die dazugehörige Syntax der Ursprungsdateien (DATAFILE, CSVINFILE und SPSSINFILE mit FILEKEY) und ein Beispiel, siehe gleichnamigen Abschnitt unter OPENQFILE.

Spezielle Optionen

CSV Copy

Das Keyword COPY erlaubt die einfache Integration weiterer Variablen aus CSV-Files.

Syntax:

ASSOCFILE CSV COPY = <filename> KEY <key-variable> <key-field> 
[ BLACKLIST | WHITELIST ] {<fieldname>}*n; 

<key-variable> ::=   die Schlüsselvariable im Hauptdatensatz
<key-field>           ::=   Name des Feldes, das als Schlüssel dienen soll

Steht vor dem Zuweisungszeichen das Keyword COPY im Statement, 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 der 'normalen' variablen. Zusätzlich werden COMPUTE-Statements generiert, die die Inhalte der ASSOCVARS in diese Standard-Variablen übertragen.

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 BLACKLIST/WHITELIST in einem ASSOCFILE CSV ohne COPY zwar wirkungslos, aber kein Fehler.

Große Datenmengen

ASSOCFILE [ BIG | DBASEIN ]

Im Normalfall wird die Information aus dem ASSOCFILE im RAM gespeichert, bevor das DATAFILE gelesen wird. Dies hat natürlich den Vorteil, dass die Information über den Schlüssel sehr schnell gefunden wird. Mit der Angabe des Schlüsselwortes BIG vor dem Zuweisungszeichen wird das System angewiesen, die Information während des Einlesens des DATAFILEs aus dem ASSOCFILE zu lesen. Hierfür wird vor dem Einlesen des DATAFILE ein Index aufgebaut. Diese Variante ist zwar langsamer, aber wesentlich unempfindlicher bei der Verarbeitung großer Hintergrunddateien z.B. über Panels etc. (ab Version 2.91). Ab der Version 3.0 unter Windows oder Linux (gt bzw. gtc) dürfte BIG nicht mehr erforderlich sein, wenn genügend RAM im Rechner vorhanden ist. Ebenfalls ab Version 3.0 darf die Schlüsselvariable auch vom Typ ALPHA sein.

Als Quelle kann auch eine DBASE-Datei dienen, indem man als Qualifizierung DBASEIN angibt. Alle Felder der DBase-Datei sind dann automatisch als ASSOCVAR definiert.


AssocVar

Syntax:

ASSOCVAR <varname> = [ ALPHA] <startcol> [ <len> [ <width> ] ] ;

Jedes ASSOCVAR-Statement erzeugt eine neue, ergänzende Variable namens '<varname>'. Diese Variable hat intern den Typ OPEN und  kann mehrere Werte enthalten ( 1:n oder n:m-mapping ). Über '<startcol>' und '<len>' werden einfache Variablen (Angabe der Startspalte und Länge) angesprochen; mit der Angabe zu <width> können Variablen vom Typ VARFAMILY angesprochen werden. Die Inhalte werden als Alpha-Variablen gehandhabt, wenn dies durch ALPHA verlangt wird.

Bei ASSOCVAR ALPHA gilt eine Besonderheit: wenn man deren Inhalte in ein ASCIIOUTFILE ausgeben will, muss man die Inhalte erst durch ein COMPUTE ALPHA in eine 'normale' Variable vom Typ ALPHA übertragen. Also z.B.:

COMPUTE ALPHA normal = AssocAlphaVar;

ASCIIOUT normal = 10 20;


AssocEnd

Syntax:

ASSCOCEND <filename> ;

Jedes ASSOCFILE-Statement muss durch ein zugehöriges ASSOCEND-Statement beendet werden. Eine Schachtelung von ASSOCFILEs ist nicht erlaubt. Nach einem ASSOCEND darf aber wieder ASSOCFILE erscheinen. <filename> ist genau so zu schreiben wie im ASSOCFILE-Statement.

Hier ein zusammenhängendes Beispiel. In der Datei FAMILY.TAB steht:

datafile = "fam.*";

 

variable famnr = 1 5;

variable kinderzahl = *;

 

variable ort = * labels

1 hamburg

2 kiel

;

 

#ifdef tabtask

assocfile = kin.000 key famnr 1 5;

assocvar Alter = 7 2;

evalfamvalonce schulort = no;

assocend kin.000;

table = famnr by Alter;

table = ort by Alter;

#end

end;

Parallel dazu das TAB-File mit der das ASSOCFILE erstellt wurde:
(dies ist natürlich nicht zwingend)

datafile = "kin.*";

 

variable famnr = 1 5;

variable kindernr = *;

variable Alter = 7 2 ;

 

end;

Hier wird eine einfache 1:n Abbildung realisiert: jede Familie kann mehrere Kinder haben; die Zusammengehörigkeit wird durch den Schlüssel "<famnr>" hergestellt. Da dieselbe "<famnr>" in mehreren Records der Kinderdatei auftauchen kann, kann die Variable Alter Mehrfachnennungen enthalten. Am einfachsten lässt sich dies in Variablen vom Typ OPEN abbilden. Werden RECODE-Sets notwendig, muss man die Werte in geeignete Familienvariablen umkopieren.

EVALFAMVALONCE im ersten TAB-File stellt sicher, dass mehrere Kinder einer Familie dasselbe Alter haben können.


AssocToInvert

Syntax:

ASSOCTOINVERT = [ CSV | SPSS | DBASE | ASCIIN }*n = [ YES | NO ];

Voreinstellung: ASSOCTOINVERT = CSV SPSS DBASE ASCIIN;

ASSOCTOINVERT steht vor dem ASSOCFILE-Statement und gilt bis zu einem neuen ASSOCTOINVERT. Hiermit besteht die Möglichkeit, Inhalte aus ASSOCFILEs gezielt in invertierte Datenfiles zu übernehmen. Ist ASSOCTOINVERT für eine verwendete Quelle eingeschaltet, werden die erforderlichen Informationen auch in INC- bzw. JSON-Files eingetragen, damit das invertierte File auch für GESS LiveTabs verwendet werden kann.

Es ist zu beachten, dass auch einfache Variablen aus ASSOCFILE zu mehr als einem Wert führen können, wenn derselbe Schlüssel im ASSOCFILE mehrfach vorkommt. Ist dies der Fall, wird nur der erste Wert verwendet.

Alternatives Vorgehen: InvertIn und ASSOCFile

Ein invertiertes File kann auch auf anderem Wege um Variablen aus einer spaltenfixierten ASCII-Datei erweitert werden. Hier wird der Schlüssel im ASSOCFILE über seine Spaltenposition definiert. Die zu ergänzenden Variablen werden in beliebig vielen ASSOCVAR-Statements sowohl mit einem Namen als auch mit einem Spaltenbereich versehen. In einem anschließenden INVERTOUT werden diese zusätzlichen Variablen aus dem ASSOCFILE mit ausgegeben, nachdem man die Werte mittels COMPUTE LOAD in atomare SingleQs übertragen hat.

Zum Beispiel:

printfile ps = "test01.ps";

invertin = "HH-Kdat-ge3";

Assocfile = HH_BET.dat KEY GeoID 1 7;

assocvar xWahl17  =  40 5;

assocvar xAnzIntsum = 195 8;

assocend HH_BET.dat;

singleq wahl17 =;    

title wahl17  = "Wähler bis 6. Zeitbl. (abs.)"; 

compute load wahl17 = xWahl17;

singleq Anzintsum =; 

title Anzintsum = "Anzahl Interviews WTB (abs.)"; 

compute load Anzintsum = xAnzIntsum;

invertout = "HH-kdat-gW1";