Filter

<< Click to Display Table of Contents >>

Navigation:  Datenmodifikation > Filterung >

Filter

Die Schlüsselwörter für die temporäre Auswahl definierter Fälle lauten FILTER, TABLEFILTER und SETFILTER.

Es stehen Einstellungsoptionen zur Vertextung und Bearbeitung gesetzter FIlter zur Verfügung.


Filter

Syntax:

FILTER <varlist> [ = <Bedingung> | AS <varname> ] ;

Mit FILTER können bereits bestehenden Variablen ein Filter zugeordnet werden. Folgt hinter der Variablenliste das Zuweisungszeichen, kann man dahinter eine Bedingung schreiben. Folgt das Schlüsselwort AS, kann man die Zuweisung desselben Filters wie der einer anderen Variablen verlangen.

Inhaltlich kann ein Filter außer Kraft gesetzt werden, indem er mit einer Bedingung überschrieben wird, die immer TRUE ergibt, z.B.

FILTER F1 = 1 EQ 1;


TableFilter

Syntax:

TABLEFILTER <number> = TEXT "<text>" <Bedingung>;

Alle Tablefilter bilden ein ARRAY (1..10) von Selektionsbedingungen für die Tabellierung. Sie gelten wie TABSELECT für die folgenden Tabellenanweisungen. Alle TABLEFILTER werden untereinander mit AND verknüpft.

Ein gesetzter TABLEFILTER kann mit TABLEFILTER = NO; wieder ausgeschalten werden.

Bei der POSTSCRIPT-Ausgabe werden die definierten Texte in der Reihenfolge der Adressen (1..10) mit im TOPTEXT aufgeführt, wenn dieser angefordert ist. Wird ein leerer Text angegeben ( "" ), so wird die Zeile unterdrückt.

TableFilterByCode

Variante von TABLEFILTER, die insbesondere bei der Arbeit mit Makros nützlich ist.

Syntax:

TABLEFILTERBYCODE <NUMBER> = [ <options> ] <VARIABLE> ( <CODE> ) ;

<options> ::= [ VARTITLE | NOMISSING | SUPPRESSOVERCODES | USELABELS ] <options>

Ähnlich wie bei TABSELECTBYCODE kann man hier nur den Variablennamen und den Code angeben, und überlässt es GESStabs, den Labeltext als Kennzeichnung des Filters einzutragen. Es gelten dieselben Optionen wie für TABSELECTBYCODE.


SetFilter, EndFilter, CopyFilter

SETFILTER definiert eine Variablen (bzw. Liste von Variablen) als gefiltert in Abhängigkeit von einer beliebigen Bedingung: die gefilterten Variablen gehen immer dann nicht in Tabellen ein, wenn die Bedingung FALSE ergibt.

Syntax:

SETFILTER [ <filtername> ] [ TEXT "filtertext" ] = < log. Bedingung > ;
ENDFILTER [ <filtername> ] ;
COPYFILTER <varname> = <varname>;

Die häufigste Anwendung dürfte sein, Filterführungen des Fragebogens abzubilden. SETFILTER ist aber auch hilfreich, um den Gültigkeitsbereich von VARGROUPs und VARFAMILYs einschränken.

Die Syntaxkonstrukte USEFILTER/MAKEFILTER sind außer Dienst gestellt, siehe Abgelöste Befehle. Frühere Beschränkungen von FILTER / SETFILTER / ENDFILTER im Zusammenhang mit RANDOM-Reihenfolgen sind aufgehoben.

Mit COPYFILTER kann eine (ggf. komplexe) Filterung an neu berechnete Variablen vererbt werdem. Dies ist überwiegend für Tabellierungszwecke sinnvoll.

Wird eine ausgefilterte Variable (die Bedingung ergibt ein FALSE) in einem COMPUTE angesprochen, ist das Resultat MISSING.

Zum Beispiel:

SETFILTER Filter1 = Varxx EQ 2;

  SINGLEQ gefiltert = * labels

  1 ...

  ;

SETFILTER Filter2 = gefiltert eq 1;

  SINGLEQ Doppeltgefiltert = * ...

ENDFILTER;

  SINGLEQ WiederGefiltert = * ...

ENDFILTER Filter1;

SETFILTER und ENDFILTER verwalten einen Filterstapel. Mit einem ENDFILTER wird der gerade gültige Filter beendet, und ggf. gilt dann wieder ein zuvor definierter Filter. Ein ENDFILTER-Statement mit einem expliziten Namen beendet alle Filter bis hinunter zum benannten Filter, falls dieser existiert. Ein benanntes ENDFILTER kann also mehrere SETFILTER beenden. Existiert der benannte Filter nicht mehr auf dem Stapel, gibt es eine Fehlermeldung.

Wird ein SETFILTER innerhalb eines SETFILTER-ENDFILTER-Blocks gesetzt, so wird die Bedingung an die bestehende Bedingung mit AND verknüpft angehängt. Inhaltlich wird also die Variable doppeltgefiltert - im obigen Beispiel sowohl nach "gefiltert eq 1" als auch nach "Varxx eq 2" gefiltert.

Wird im SETFILTER ein Filtertext definiert, so wird dieser Filtertext an den VARTEXT aller Variablen angehängt, die im entsprechenden Filterblock definiert werden.

Beispiel:

SETFILTER TEXT "Nur an Frauen" = geschlecht eq 1;

  SINGLEQ Grauanteil = text "

  Frage 4 (Kontakt):

  Wie hoch ist der Grauanteil in Ihrem Haar?

  " * labels

  ...

  ;

ENDFILTER;

Beim Tabellenausdruck mit CITEALLVARS oder CITEVARTEXT würde z.B. im TOPTEXT stehen:

Frage 4 (Kontakt):

Wie hoch ist der Grauanteil in Ihrem Haar?

Nur an Frauen


Einstellungen zu Filter-Funktionen

ConcatFilterText

Globale Einstellung zur Anzeige eines oder mehrerer Filtertexte

Syntax:

CONCATFILTERTEXTS = [ YES | NO ];

Default: NO

In Default wird immer nur der Text des aktuellen Filters in der Filterverschachtelung ausgewiesen. Setzt man CONCATFILTERTEXTS auf YES, werden die Texte aller Filter in der Filterverschachtelung zeilenweise ausgegeben.

IgnoreSetFilter

Syntax:

IGNORESETFILTER = [ YES | NO ];

Default: NO

Manchmal ist es sinnvoll, die im Skript gesetzten SETFILTER zu ignorieren. Das Statement

IGNORESETFILTER = YES;  

bewirkt eine Ausführung des Skripts so, als seien keinerlei SETFILTER / COPYFILTER / ENDFILTER vorhanden.