Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

0 votes

Guten Tag!

Ich würde die Versuchspersonen meiner Studie gerne eine Thought-Listing-Aufgabe erledigen lassen - d.h., dass die Versuchspersonen alle Gedanken, die ihnen einfallen, aufschreiben sollen. Hierfür habe ich das Tool offene Nennungen verwendet, wobei ein Gedanke in eine Zeile geschrieben werden soll (siehe Screenshot 1). Nun möchte ich die hier generierten Gedanken am Ende des Fragebogens erneut darbieten mit der Bitte, dass die Versuchspersonen ihre Gedanken in eine von drei Kategorien einsortieren sollen (Siehe Screenshot 2, verwendet wurde hier das Tool Skala (Zwischenwerte beschriftet)). Um die Texte im Rahmen der offenen Nennung erneut darzubieten habe ich folgenden PHP-Code eingefügt, der soweit auch funktioniert:

"replace('%Gedanke1%%', 'TL02x01', 'response');
replace('%Gedanke2%%', 'TL02x02', 'response');
replace('%Gedanke3%%', 'TL02x03', 'response');
replace('%Gedanke4%%', 'TL02x04', 'response');" usw.

Mein Problem ist jetzt, dass, wenn eine Versuchsperson bspw. nur 3 Gedanken bei der offenen Nennung aufgeschrieben hat, nun 3 gefüllte und 12 leere Items bei der Skala zum Einsortieren gezeigt werden. Gibt es vielleicht eine Möglichkeit, dass bei Nichtvorhandensein des Textes, der Platzhalter nicht ersetzt wird, sondern das Item komplett weg fällt?

Vielen herzlichen Dank im Voraus!!

in SoSci Survey (dt.) by s145239 (110 points)

1 Answer

0 votes

Vorneweg eine Warnung: So wie Sie die Daten erheben möchten, erwartet Sie in der Auswertung womöglich Qual und Verderben. Sie haben dort dann geschlossene Bewertungen für offene Antworten - und das lässt sich zumindest quantitativ kaum abbilden.

That said ... im Prinzp können Sie der PHP-Anleitung im Kapitel Items in eine andere Frage übernehmen verwenden und mit !='' prüfen, ob etwas (also nicht nichts) in den Feldern steht:

$items = [];
foreach (getItems('TL02', 'all') as $item) {
  $text = value(id('TL02', $item));
  if (trim($text) != '') {
    $items[] = $item;
    replace('%Gedanke'.$item.'%', $text);
  }
}
question('TL03', $items);
by SoSci Survey (199k points)
edited by SoSci Survey
Vielen Dank für die schnelle Antwort! Bei der Vorwarnung bezüglich der Datenerhebung würde ich gerne nochmal nachhaken: mich interessieren die qualitativen Antworten, also Gedanken der Vpn, nicht. Was mich interessiert sind lediglich die Kategorisierungen und deren Anzahl (auf Screenshot 2) - d.h., wie viele Gedanken wurden als neutral, pos. oder negativ bewertet. Gegeben dieser Info - würden Ihre Bedenken dann weiterhin bestehen bleiben?

Vielen Dank für den Code! Ich habe ihn in mein Projekt eingefügt (mit der kleinen Änderung, dass TL03 bei mir TH01 heißt, also die Variable, die die Kategorisierung beinhaltet) und den vorherigen Code mit dem replace-Befehl entfernt. Jetzt wird mir im Debug-Modus folgendes angezeigt:

[Inhalt]    Erstelle Frage TH01
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 11

Können Sie sich vielleicht erklären, was hier falsch gelaufen sein könnte? Vielen Dank im Voraus!
Ich gehe davon aus, dass Sie auf der vorherigen Seite mit der Frage TL02 gestartet und auch ein paar Zeilen eingetragen haben.

Bitte ergänzen Sie in getItems() als erstes ein 'all', das hatte ich oben vergessen (nun aber ergänzt).

foreach (getItems('TL02', 'all') as $item)

Wenn dann noch nichts erscheint, ergänzen Sie ganz unten bitte noch ein

debug($items);
Vielen Dank! Leider scheint da noch immer etwas nicht ganz zu funktionieren...ich habe beides ausprobiert und es kommt noch immer dieselbe Information im Debug-Modus mit "Die Seite zeigt keinen Inhalt, automatisch weiter mit Seite 11".

Als Debug-Information für $items wird angezeigt:
Array (ohne Elemente) und für TL02 (das hatte ich zusätzlich noch gemacht): 'TL02' = TL02 (string)
value('TL02') = 4

Ich hatte hier vier Eingaben in der Testrunde, also das scheint zu stimmen, jedoch scheint das Array aus irgendeinem Grund nicht befüllt zu werden.
Gehen wir eins nach dem anderen durch. Ergänzen Sie über der FOR-Schleife bitte:

debug(getItems('TL02', 'all'));
debug(getItems('TL02', 'valid'));

Und dann noch eines hier:

$text = value(id('TL02', $item));
debug($text);
Habe ich gemacht, jetzt kommen folgende Meldungen:

Debug-Information für getItems('TL02', 'all'):
Array (ohne Elemente)

Debug-Information für getItems('TL02', 'valid'):
01, 12

Debug-Information für $items:
Array (ohne Elemente)

Debug-Information für 'TL02':
'TL02' = TL02 (string)
value('TL02') = 2
In Ordnung, offenbar liefert getItems('TL02', 'all') hier ein feherhaftes Ergebnis. Das sehen wir uns zeitnah an.

Aber wenn 'valid' gleich die ausgefüllten Items liefert, dann können Sie Ihren Code ohnehin vereinfachen:

$items = [];
foreach (getItems('TL02', 'valid') as $item) {
  $varID = id('TL02', $item);
  replace('%Gedanke'.$item.'%', $varID, 'response');
  $items[] = $item;
}
question('TH01', $items);
Update: Auf www.soscisurvey.de liefert nun getItems('TL02', 'all') auch für offene Nennungen ein korrektes Ergebnis.
Perfekt, es funktioniert!!! Tausend Dank!
Danke für die Aufdeckung des Programmfehlers und die Unterstützung bei der Fehlersuche :)
...