====== Interne Variablen ======

In den erhobenen Daten gibt es zwei Arten von Variablen: Zum einen Verwaltungsinformationen wie die Fallnummer ''CASE'' oder den Zeitpunkt wann das Interview begonnen wurde ''STARTED'' ([[:de:results:variables]]). Zum anderen die Antworten des Teilnehmers und damit verbundene Messungen (z.B. Reaktionszeiten). Die zweite Art von Variablen ist jeweils an einen Baustein des **Fragenkatalogs** geknüpft, z.B. an eine Frage oder das Item, welches beantwortet wurde. Darüber hinaus gibt es funktionale Bausteine, wie z.B. den [[:de:create:questions:random]]. Diese haben eine Kennung wie Fragen (z.B. ''AB01'') und sie können zugehörige Variablen im Datensatz besitzen.

Einer dieser funktionalen Bausteine sind "Interne Variablen". Sie kommen immer dann zum Einsatz, wenn Daten im Datensatz gespeichert werden sollen, die über die regulären Fragen hinausgehen. Gängige Einsatzbereiche für interne Variablen sind:

  * Zufallsziehungen mittels Urne ([[:de:create:random_urns]])
  * Benutzerdefinierte Fragetypen, die so in SoSci Survey nicht vorgesehen sind ([[:de:create:inputs-custom]])
  * Messungen während der Erhebung mittels JavaScript ([[:de:create:javascript]])
  * Live-Auswertungen innerhalb des Fragebogens ([[:de:create:points]])
  * Umkodierungen während der Erhebung ([[:de:create:functions:put#beispielcodes_transformieren|put() - Codes transformieren]])

Ein Baustein vom Typ "Interne Variablen" hat ausschließlich die Funktion, zusätzliche Variablen im Datensatz bereitzustellen.


===== Interne Variablen anlegen =====

  * Erstellen Sie im **Fragenkatalog** innerhalb einer Rubrik zunächst eine Frage "Interne Variablen":\\ **Fragenkatalog** -> **Frage hinzufügen** -> //Funktionale Bausteine// -> //Interne Variablen//.
  * Im Baustein wird automatisch eine Variable angelegt.
  * Weitere Variablen kann man (falls erforderlich) über den **Fragekatalog** -> **Variable hinzufügen** anlegen oder direkt in der Frage mit der //Schnell-Eingabe für Items//.

Sie können für jede Variable eine Beschreibung eintragen. Diese Beschreibung wird im Datensatz zur Beschriftung (Label) der Variable verwendet. Sie können hier auch zusätzliche Notizen ergänzen, z.B. "1=Kontrollgruppe, 2=EG viel, 3=EG wenig")

**Wichtig:** Die Kennung einer internen Variable ist immer 7-stellig. Wenn der Baustein "Interne Variablen" z.B. die Kennung ''IV01'' hat, so trägt die erste Variable die Kennung ''IV01_01''. Variablen-Kennungen können Sie jederzeit auch in der **Variablen-Übersicht** nachsehen.


===== Verwendung =====

Interne Variablen haben zwei Funktionen. Zum einen können Sie Werte speichern, die mittels PHP-Code ermittelt wurden. Dazu dienen v.a. die Funktionen ''[[:de:create:functions:put]]'' und ''[[:de:create:functions:urnDraw]]''. Zum anderen können innerhalb einer Fragebogen-Seite Daten gespeichert werden, die mittels [[:de:create:javascript]] ermittelt wurden.


==== Interne Variablen und PHP-Code ====

Um interne Variablen im PHP-Code zu verwenden, müssen diese lediglich im **Fragenkatalog** existieren. Sie sollten __nicht__ in eine Fragebogen-Seite gezogen oder mittels ''[[:de:create:functions:question]]'' eingebunden werden (sonst besteht die Möglichkeit, dass Teilnehmer die Werte manipulieren).

**Beispiel:** Auf Seite 3 des Fragebogens wurde eine Skala SK01 mit 10 Items abgefragt. Der Fragebogen soll einen Mittelwertindex der Skala ([[:de:general:indices]]) in die interne Variable ''IV01_01'' speichern. Dafür würde auf Seite 4 folgender PHP-Code verwendet:

<code php>
$index = valueMean('SK01');
put('IV01_01', $index);
</code>

Eine Reihe weiterer Anwendungen ist in der Referenz zur Funktion ''[[:de:create:functions:put]]'' nachzulesen.

Eine Sonderrolle nimmt die [[:de:create:random_urns]] ein. Mit der Funktion ''[[:de:create:functions:urndraw]]'' wird dabei aus einer Urne eine Kombination mehrerer Werte gezogen und in mehrere interne Variablen innerhalb eines Bausteins "Interne Variablen" gespeichert.

**Hinweis:** ''put()'' und ''urnDraw()'' speichern die Werte sofort im Datensatz. Die Werte können daher noch auf derselben Fragebogen-Seite mittels ''[[:de:create:functions:value]]'' abgerufen werden.


==== Interne Variablen und JavaScript ====

Wird ein Baustein "Interne Variablen" in eine Fragebogen-Seite hineingezogen, so werden innerhalb der Seite versteckte Formularelemente bereitgestellt. Diese können z.B. mittels [[:de:create:javascript]] mit Daten befüllt werden. Beim Klick auf "Weiter" werden diese Daten an den Server übermittelt und im Datensatz gespeichert.

Die HTML-ID der versteckten Eingabefelder entspricht der Kennung der internen Variable.

Der folgende HTML- bzw. JavaScript-Code würde z.B. die Uhrzeit speichern, die auf dem Computer des Teilnehmers eingestellt ist/angezeigt wird. Dies kann hilfreich sein, wenn man über mehrere Zeitzonen hinweg erhebt. Voraussetzung ist, dass eine interne Variable "TN01_01" im **Fragenkatalog** angelegt und über dem JavaScript-Code in den Fragebogen gezogen wurde.

<code javascript>
<script type="text/javascript">
<!--

// Die aktuelle Systemzeit auslesen
var date = new Date();

// Systemzeit als Stunden:Minuten formatieren
var hours = String(date.getHours());
if (hours.length < 2) hours = "0" + hours;
var minutes = String(date.getMinutes());
if (minutes.length < 2) minutes = "0" + minutes;
var time = hours + ":" + minutes;

// Das versteckte Eingabefeld identifizieren
var input = document.getElementById("TN01_01");

// Den Wert hineinschreiben
input.value = time;

// -->
</script>
</code>

Die Anwendung wird im Kapitel [[:de:create:inputs-custom]] genauer beschrieben.

