====== Abfrage eines persönliches Codes ======

In mehrwelligen Befragungen hat sich für gedruckte Fragebögen (Pen 'n Paper) die Verwendung eines "persönlichen Codes" bewährt. Dabei soll der Teilnehmer im ersten Fragebogen aus den Fragmenten persönlicher Informationen einen Code erstellen. Das sieht etwa aus wie folgt:

  * Erste Stelle: Letzter Buchstabe des Geburtsmonats
  * Zweite Stelle: Zweiter Buchstabe des Vornamens der Mutter
  * Dritte und vierte Stelle: Die ersten beiden Buchstaben des Geburtsorts
  * u.s.w.

Gibt der Teilnahmer im zweiten Fragebogen denselben Code an, erlaubt das die Zuordnung der beiden Datensätze. Oben sehen Sie nur ein illustrierendes Beispiel -- konkrete Ausführungen finden Sie z.B. bei: 

> Pöge, A. (2008). Persönliche Codes „reloaded“. Methoden – Daten – Analysen, 2(1), 59-70. [[https://www.gesis.org/fileadmin/upload/forschung/publikationen/zeitschriften/mda/Vol.2_Heft_1/2008_MDA1_Poege.pdf|Online verfügbar]].

Ein Vorteil dieser Lösung ist, dass der Code in Zeiten vor dem Social Web hohe Anonymität gewährleistete und erlativ zuverlässig funktionierte. Allerdings hat diese Lösung auch Nachteile:

  * Ein Vertipper reicht aus, um die Zuordnung zu erschweren.
  * Das Verfahren ist für die Teilnehmer mit einem gewissen Aufwand verbunden, wird mitunter als "lästig" wahrgenommen und der Bezug zu persönlichen Daten weckt schnell Sorgen um den Datenschutz.
  * Gibt ein Teilnehmer auf sozialen Netzwerken viel über sich preis oder liegen andere Datenquellen vor, kann man Teile des persönlichen Codes ermitteln. Bei einer begrenzten Grundgesamtheit (z.B. Studierende eines Jahrgangs) reicht das ostmals, um die Daten zu de-anonymisieren.

===== Alternativen im Online-Fragebogen =====

Verwendet man einen Online-Fragebogen, stehen für mehrwellige Erhebungen weitere Möglichkeiten zur Verfügung. Jede Lösung ist ein Kompromiss zwischen Datenschutz und Komfort/Zuverlässigkeit. Die folgenden Möglichkeiten sind nach Datenschutz-Level geordnet, wobei schon die erste und damit "schlechteste" Option ein gutes Datenschutz-Level gewährleistet -- aber eben nicht maximalen Datenschutz. Für die meisten Anwendungsfälle ist die Serienmail das Mittel der Wahl.

  * Verwendet man die [[:de:survey:mailing|Serienmail-Funktion]] von SoSci Survey, weist das Programm jedem Teilnehmer einen persönlichen Code zu und vermerkt diesen im Datensatz, wenn die [[:de:survey:mailing#datenschutz-modus|Datenschutz-Einstellung]] für die Adresseinträge das erlaubt. In der Datenschutz-Einstellung "pseudonym" erhält der Forscher keine Information darüber, welcher Code zu welchem Adresseintrag gehört -- nach Löschen der Adresseinträge ist die Anonymität zuverlässig gewährleistet.
  * Mit einer offenen Texteingabe kann man die E-Mail-Adresse des Teilnehmers abfragen, auf der folgenden Seite mittels ''[[:de:create:functions:mailsend]]'' den Versand der Einladung zum zweiten Fragebogen planen und die E-Mail-Adresse dann mittels ''[[:de:create:functions:dropvalue|dropValue()]]'' sofort wieder löschen. Den Zurück-Knopf (falls im Fragebogen erlaubt) sollte man zumindest auf dieser Seite mittels ''[[:de:create:functions:option]]'' deaktivieren, um eine versehentliche Speicherung der Mailadresse zu vermeiden.
  * Mit einer Frage vom Typ [[:de:create:questions:email]] am Ende des Fragebogens kann man (bei Verwendung des Platzhalters ''%caseNumber%'') einen individuellen Link zum zweiten Fragebogen versenden. Der Teilnehmer muss dafür seine E-Mail-Adresse eingeben, diese wird allerdings nicht gespeichert. Ein Nachteil gegenüber der Serienmail-Funktion besteht darin, dass der Link nicht zeitgesteuert verschickt werden kann, weil dafür die E-Mail-Adresse zeitweise gespeichert werden müsste.
  * Ebenfalls möglich ist die [[:de:create:vouchers|Anzeige eines zufälligen Codes am Ende des ersten Fragebogens]]. Diesen muss der Teilnehmer dann notieren und im zweiten Fragebogen erneut eingeben.


===== Abfrage eines persönlichen Codes =====

Hat man sich gegen die Alternativen für die Abfrage eines persönlichen Codes entschieden, gibt es in SoSci Survey zwei grundsätzliche Möglichkeiten der Umsetzung:


==== Offene Texteingabe ====

Die erste Variante liegt auf der Hand, die entspricht dem Vorgehen im gedruckten Fragebogen. Man erklärt dem Teilnehmer, wie er den Code erstellen soll, und verwendet dann eine Frage zur [[:de:create:questions:text]], damit der Teilnehmer den Code eingeben kann.

Um wenigstens das korrekte Format zu überprüfen, kann man für die Texteingabe-Frage einen "regulären Ausdruck" definieren. Dafür klickt man das Eingabefeld links in der Navigation an und legt unter //Einschränkungen für die Texteingabe// einen //Regulären Ausdruck// fest. Reguläre Ausdrücke sind komplexe Suchmuster mit spannenden Möglichkeiten ([[https://www.regular-expressions.info/|regular-expressions.info]]), die auf den ersten Blick aber auch etwas komplex aussehen. Für den persönlichen Code ist es halb so schlimm:

    /[A-Z]{2}[0-9]{3}[A-Z]/

Dieser Reguläre Ausdruck beschreibt einen Code bestehend aus 2 Buchstaben (Großbuchstaben, keine Umlaute), drei Ziffern und dann nochmal einem Buchstaben, also z.B. ''AB123C''.

  * Die eckigen Klammern definieren eine Liste erlaubter Zeichen (Zeichenklasse). ''[A-Z]'' umfasst also alle Zeichen von A bis Z (nur Großbuchstaben), ''[A-Za-z]]'' umfasst auch Kleinbuchstaben und ''[A-Za-zÄÖÜäöü]'' umfasst auch die deutschen Umlaute.
  * Die geschweiften Klammern geben an, wie viele dieser Zeichen vorhanden sein müssen. Fehlen sie (wie am Ende des obigen Beispiels), muss genau ein solches Zeichen vorhanden sein. ''{2}'' nach der ersten Zeichenklasse gibt an, dass zwei Buchstaben erwartet werden.
  * Die ''[0-9]'' in eckigen Klammern besagt, dass eine Ziffer erwartet wird. Ebenso könnte man die vordefinierte Klasse ''\d'' (ohne eckige Klammern) verwenden.


==== Getrennte Texteingaben ====

Einfacher für den Teilnehmer ist es, wenn man die einzelnen Bestandteile des Codes getrennt abfragt. Und auch die Formatprüfung gestaltet sich dann einfacher.

  * Legen Sie dafür eine Frage "Offene Texteingabe" an und darin so viele Eingabefelder wie Ihr Code Bestandteile hat, also z.B. ein Eingabefeld (Item) "Wie lautet der letzte Buchstabe Ihres Geburtsmonats"
  * Klicken Sie die Eingabefelder links in der Navigation an, um unter //Einschränkungen für die Texteingabe// in der AUswahl //Definierte Zeichen// die passende Option zu wählen, z.B. "Ziffern".

Es ist eigentlich nicht notwendig, dass Sie dem Teilnehmer seinen persönlichen Code nochmal "en block" anzeigen, aber wenn Sie das machen möchten, verwenden sie ein klein wenig [[:de:create:javascript|JavaScript]]. Angenommen Ihre Texteingabe-Frage hat die Kennung "PC01" und enthält 6 Eingabefelder, dann würden Sie unter der Frage folgenden HTML-/JavaScript-Code platzieren:

<code javascript>
<div style="margin: 2em; font-size: 1.2em;">
  Ihr persönlicher Code:
  <span id="personalCode" style="font-weight: bold;">&ndash;</span>
</div>
<script type="text/javascript">
<!--
var pcInputs = ["PC01_01","PC01_02","PC01_03","PC01_04","PC01_05","PC01_06"];
function pcRefresh() {
  var code = "";
  for (var i=0; i<pcInputs.length; i++) {
    code+= document.getElementById(pcInputs[i]).value;
  }
  document.getElementById("personalCode").innerHTML = code;
}
// Init
pcRefresh();
for (var i=0; i<pcInputs.length; i++) {
  document.getElementById(pcInputs[i]).addEventListener("keyup", pcRefresh);
}
// -->
</script>
</code>

Für die spätere Analyse ist es hilfreich, den Code auch gleich "en block" im Datensatz zu speichern. Dafür benötigen Sie eine [[:de:create:questions:internal|Interne Variable]] (z.B. "IV01_01") und auf der Folgeseite (!) folgenden PHP-Code:

<code php>
$code = implode(valueList('PC01'));
put('IV01_01', $code);
</code>

Falls Sie mit leeren Feldern rechnen, können Sie die Bestandteile des Codes auch mit einem Bindestrich getrennt speichern (abgesehend davon, dass Sie die einzelnen Bestandteile ja ohnehin nochmal einzeln im Datensatz haben):

<code php>
$code = implode('-', valueList('PC01'));
put('IV01_01', $code);
</code>

**Tipp:** Legen Sie für die offene Texteingabe auf jeden Fall eine Antwortpflicht fest, Lücken im Code können Sie i.d.R. nicht brauchen.