[[put()]]
Übersetzungen dieser Seite:
 

Dies ist eine alte Version des Dokuments!


put()

void put(string Variable, mixed Wert, [boolean JedeVariable])

Mit der Funktion put() können Sie einen einzelnen Wert im Datensatz abspeichern. put() wird verwendet, wenn der Fragebogen einen Wert berechnet oder würfelt – und man diesen Wert in der Auswertung benötigt. Wird beispielsweise der Stimulus einer Frage zufällig variiert, dann muss man für die Auswertung wissen, wozu der Befragte sich geäußert hat.

  • Variable
    Die Kennung der internen Variable (s. unten), in welcher der Wert gespeichert werden soll. Die Kennung wird als String in Anführungszeichen angegeben, z.B. 'IV01_01'.
  • Wert
    Eine Zahl oder ein Text (String), welche(r) in der Variable abgelegt werden soll. Für gewöhnlich wird als zweiter Parameter eine Variable mit dem entsprechenden Wert angegeben.
  • JedeVariable (optional)
    Normalerweise speichert `put()` ausschließlich in interne Variablen. In Ausnahmefällen kann es sinnvoll sein, den Wert einer anderen Variable zu überschreiben. In diesem Fall kann ein dritter Parameter true angegeben werden.

Warnung: Verwenden Sie den dritten Parameter JedeVariable nur dann, wenn Sie genau wissen, was Sie tun und eine interne Variable nicht verwendet werden kann. Das Verändern von Antwortcodes kann die Validität des Datensatzes gefährden. Für die meisten Fälle sind die Funktionen preset() und dropValue() deutlich besser geeignet.

Interne Variablen

Bevor put() verwendet werden kann, legen Sie eine interne Variable im Datensatz an. Erstellen Sie dazu im Fragenkatalog eine neue Frage vom Typ Interne Variablen und darin mindestens eine Variabel (Item). Die vollständige Kennung dieser Variable tragen Sie als ersten Parameter im Befehl put() ein. Die Kennung finden Sie in der Variablen-Übersicht (z.B. „IV01_01“, wenn es die erste Variable in der ersten Frage in der Kategorie „IV“ ist).

Tipp: Sie können die Items einer Frage vom Typ „Interne Variablen“ auch verwenden, um Werte aus einem JavaScript zu speichern. Binden Sie die Frage dafür ganz normal im Fragebogen ein und schreiben Sie die Antworten in die versteckten Eingabefelder, die dabei erzeugt werden (Eigene Formularelemente verwenden).

Beispiel: Berechnungen

Das folgenden Beispiel geht davon aus, dass ein Konstrukt in zwei Skalen mit den Frage-Kennungen AB01 und AB02 erhoben wird – und dass eine interne Variable AB03_01 angelegt wurde, um den Skalenindex (Summenwert aller Items) zu speichern.

$sum01 = valueSum('AB01');
$sum02 = valueSum('AB02');
$index = $sum01 + $sum02;
put('AB03_01', $index);

Die Ermittlung eines Skalenindex schon während der Befragung ist natürlich vor allem dann sinnvoll, wenn man dem Teilnehmer das Ergebnis mitteilen möchte oder wenn man es für einen Filter benötigt:

if (value('AB03_01') > 100) {
  question('FU03');  // Frage für Personen mit hoher Ausprägung beim Konstrukt
} elseif (value('AB03_01') > 50) { {
  question('FU02');  // Frage für Personen mit mittlerer Ausprägung beim Konstrukt
} else {
  question('FU01');  // Frage für Personen mit geringer Ausprägung beim Konstrukt
}

Beispiel: Codes transformieren

SoSci Survey speichert für Skalen jeweils positive Antwortcodes (Kodierung und Rückgabewerte). Sollten Sie im Datensatz für eine fünfstufige Skala den Wertebereich von -2 bis +2 benötigen, können Sie einzelne Variablen wie folgt umkodieren.

Hinweis: In der Praxis ist das Umkodieren bzw. transformieren von Werten meist Teil der Auswertung und wird daher in der Statistik-Software vorgenommen. Es sind daher nur sehr spezielle Fälle, in denen eine solche Transformation schon bei der Erhebung sinnvoll ist.

Hinweis: Um einzelne Items einer Skala zu „drehen“ (das heißt z.B. für „trifft nicht zu“ eine 5 statt einer 1 zu speichern, wie bei den anderen Items), wählen Sie das Item links im Fragenkatalog aus und aktivieren die Option Antwortcodes für dieses Item invertieren.

Der folgende Code transformiert die Antworten für das Skalenitem SK01_01 vom Wertebereich 1 bis 5 in den Bereich -2 bis +2. Falls für das Skalenitem keine gültige Antwort gegeben wurde (Item ausgelassen oder eine Ausweichoption gewählt), wird im Datensatz kein Wert gespeichert. Der PHP-Code wird auf der Seite nach Frage SK01 platziert (vgl. Hinweise zu value()).

Voraussetzung ist, dass vorab eine interne Variable SK02_01 angelegt wurde (s. oben).

$original = value('SK01_01');
// Nur gültige Werte (>0) speichern
if ($original > 0) {
  put('SK02_01', $original - 3);
} else {
  put('SK02_01', false);
}

Der PHP-Code lässt sich auch kürzer (aber weniger übersichtlich) formulieren:

$org = value('SK01_01');
put('SK02_01', ($org > 0) ? $org - 3 : false);

Falls diese Transformation für alle Items der Skala SK01 vorgenommen werden sollen (und hinreichend interne Variablen in SK02 angelegt wurden), erledigt folgende Schleife diese Aufgabe. Der „innere“ Teil des PHP-Codes ist fast identisch zum obigen PHP-Code. Die Funktion id() erstellt lediglich die Kennungen SK01_01 bis SK01_10 (bei z.B. 10 Items).

$items = getItems('SK01');
foreach ($items as $item) {
  $original = value(id('SK01', $item));
  if ($original > 0) {
    put(id('SK02', $item), $original - 3);
  } else {
    put(id('SK02', $item), false);
  }
}

Beispiel: Komplexer Filter

Das folgende Beispiel ist einem Fragebogen entnommen, der an mehreren Stellen unterschiedliche Fragen für Neukunden und Bestandskunden zeigt. Ein Neukunde zeichnet sich dadurch aus, dass er früher noch nichts gekauft hat (Antwort 1 bei Auswahlfrage „KD01“) und dass die aktuelle Bestellung noch nicht ausgeliefert wurde (Antwort 1 bis 3 bei Auswahlfrage „KD02“).

Natürlich könnte man den Filter auf jeder Seite mit unterschiedlichen Fragen wiederholen – aber das ist einerseits unnötig kompliziert, andererseits wird die Trennung in Neu- und Bestandskunden bei der Auswertung ohnehin gebraucht. Daher soll sie in die interne Variable „KD03_01“ gespeichert werden.

if ((value('KD01') == 1) and (value('KD02') <= 3)) {
  put('KD03_01', 1);  // Code 1 für Neukunden
} else {
  put('KD03_01', 2);  // Code 2 für Bestandskunden
}

Den gespeicherten Code kann man auf späteren Seiten unproblematisch für Filter verwenden.

if (value('KD03_01') == 1) {
  question('SU02', '1-3,5');  // In Frage SU02 die Items 1, 2, 3 und 5 anzeigen
} else {
  question('SU02', '1,2,5-7');  // In Frage SU02 die Items 1, 2 und 5, 6, 7 anzeigen
}

Beispiel: Randomisierung I

Wenn Sie mittels shuffle() eine zufällig gemischte Liste erstellen, wird diese zunächst nicht gespeichert. Mittels put() lässt sie entweder die gemischte Liste – oder die Rangfolge der Elemente speichern. Je nachdem, was für die Auswertung benötigt wird.

Folgender PHP-Code ordnet etwa die Wert von 1 bis 10 zufällig:

$elements = array(1,2,3,4,5,6,7,8,9,10);
shuffle($elements);

Der Inhalt des gemischten Arrays $values könnte dann etwa aussehen wie folgt:

Index0123456789
Element72105948361

Die zugehörigen Ränge wäre dann:

Element12345678910
Rang10286491753

Um die Reihenfolge zu speichern, benötigen Sie eine Frage vom Typ „interne Variablen“ mit derselben Anzahl an Variablen (Items) wie die Liste Elemente hat, also für dieses Beispiel z.B. 10. Wenn die Frage die Kennung IV01 hat, lassen sich die Werte in der gemischten Reihenfolge wie folgt im Datensatz abspeichern:

for ($i=0; $i<count($elements); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id = id('IV01', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id, $elements[$i]);
}

Zum Index $i wird in der Zeile mit id() der Wert eins addiert, weil die Indizes von Arrays bei 0 zu zählen beginnen, die internen Variablen aber bei 1.

Oftmals ist es sinnvoller, die Ränge der Elemente zu speichern. Etwa wenn shuffle() eingesetzt wird, um Texte, Bilder oder Seiten im Fragebogen zufällig zu mischen. Die Ränge der Elemente speichern Sie mit folgendem PHP-Code.

for ($i=0; $i<count($elements); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Inhalt des Elements (!) erstellen
  $id = id('IV01', $elements[$i]);
  // Hier den Rang speichern
  put($id, $i + 1);
}

Dieser Code funktioniert freilich nur, wenn es sich um numerische Elemente handelt, die mit 1 zu zählen beginnen. Um die Ränge anderer Array-Inhalte (z.B. Seiten-Kennungen) zu speichern, benötigt man einen etwas anderen PHP-Code:

$pages = array('A1','A2','A3','A4','A5','B1','B2-B4','B5');
// Die Seiten nicht direkt mischen, sondern deren Positionen
$indices = array_keys($pages);
shuffle($indices);
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $random speichern
$random = array();
for ($i=0; $i<count($indices); $i++) {
  // Rang speichern wie oben
  $id = id('IV01', $indices[$i] + 1);
  put($id, $i + 1);
  // Seite in der Abfolge speichern
  $random[$i] = $pages[$indices[$i]];
}
// Neue Seitenabfolge setzen
// Nach der letzten Seite soll es auf Seite "demography" weitergehen
setPageOrder($random, 'demography');

Beispiel: Randomisierung II

Falls Sie bei einer Randomisierung mit dem Befehl random() arbeiten, müssen Sie die gewürftelte Zufallszahl im Datensatz abspeichern.

Wichtig: Wir raten davon ab, die Funktion random() im Rahmen von Experimenten zu verwenden. Ein Zufallsgenerator löst diese Aufgabe in aller Regel deutlich besser, s. auch das Kapitel Randomisierung.

Das folgende Beispiel geht davon aus, dass Sie eine interne Variable mit der Kennung „IV01_01“ angelegt haben.

// Eine ganze Zahl zwischen 1 und 2 würfeln
$zahl = random(1,2);
// Die gewürfelte Zahl im Datensatz abspeichern
put('IV01_01', $zahl);
// Und davon abhängig Textbaustein "text1" oder "text2" anzeigen
if ($zahl == 1) {
  text('text1');
} else {
  text('text2');
}
de/create/functions/put.1552346768.txt.gz · Zuletzt geändert: 12.03.2019 00:26 von christiane.muehle
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki