0 votes
in SoSci Survey (dt.) by s075713 (120 points)

Hallo!

Ich habe eine Itemliste mit 30 Items (die weder im Fragebogen geändert noch angezeigt werden soll) und möchte nun dass immer dieselbe Frage ("Bewerten Sie Ihre Freunde in dem Item X") auf eines dieser Items zurückgreift und es im Frabebogen anzeigt und abfrägt.

Dafür habe ich eine Frage vom Typ "Interne Variable" erstellt, die 30 Items hat (IL01_01.....IL01_30) und in der eigentlichen Frage vom Typ Schieberegler den Platzhalter %IL01% eingefügt und dann mit PHP Code der internen Variable zugewiesen: replace('%IL01%', 'IL01_01', 'response');

Das funktioniert aber nicht. Deshalb meine Frage: Ist es nicht möglich Platzhalter auf interne Variablen anzuwenden oder habe ich einen anderen Fehler gemacht?

Und: Gibt es eine Möglichkeit eine Schleife zu machen im Code, damit ich nicht 30x dieselbe Frage erstellen muss, sondern die einfach 30x angezeigt wird und jeweils eines der Items (am besten in zufälliger Reiehnfolge) abfrägt?

Vielen Dank!

1 Answer

0 votes
by SoSci Survey (327k points)

Das funktioniert aber nicht.

Um hierauf qualifiziert zu antworten, müssten Sie Ihre Frage bitte um den verwendeten PHP-Code ergänzen.

Gibt es eine Möglichkeit eine Schleife zu machen im Code, damit ich nicht 30x dieselbe Frage erstellen muss, sondern die einfach 30x angezeigt wird

Das kommt auf die Frage an. Wenn es z.B. eine Skalenfrage ist, können Sie darin einfach 30 Items anlegen und in einer loopPage()-Schleife nacheinander alle abfragen.

und jeweils eines der Items (am besten in zufälliger Reiehnfolge) abfrägt?

Auch dies ist möglich. Allerdings verstehe ich noch nicht ganz, weshalb Sie interne Variablen anlegen, wenn Sie ohnehin nichts darin speichern möchten. Je nach konkretem Setting ist das vermutlich auch einfacher zu realisieren.

by s075713 (120 points)
Danke für die Antwort!

Der Fragebogen besteht aus einer Abfrage von 10 Namen und danach aus 30 Fragen, die jeweils 10 Schieberegler haben, die sich auf die 10 Namen beziehen.
Diese 30 Schieberegler-Fragen sehen so aus:

Bewerten Sie Ihre Freunde in dem Item X (Item 1-30):
Name1: Schieberegler
Name2: Schieberegler
......
Name10: Schieberegler

Der PHP Code Baustein dazu:
replace('%name01%', 'NL01_01', 'response');
replace('%name02%', 'NL01_02', 'response');
replace('%name03%', 'NL01_03', 'response');
replace('%name04%', 'NL01_04', 'response');
replace('%name05%', 'NL01_05', 'response');
replace('%name06%', 'NL01_06', 'response');
replace('%name07%', 'NL01_07', 'response');
replace('%name08%', 'NL01_08', 'response');
replace('%name09%', 'NL01_09', 'response');
replace('%name10%', 'NL01_10', 'response');
replace('%IL01%', 'IL01_01', 'response');
replace('%IL02%', 'IL01_02', 'response');
replace('%IL03%', 'IL01_03', 'response');
...........


DIe Platzhalter für die Namen funktionieren, die beziehen sich auf die zeurst abgefragte Liste. Die Platzhalter für die Items, die sich auf die interne Variable beziehen funktionieren nicht.

Natürlich könnte ich einfach 30 solche Fragen mit jeweils 10 Schiebereglern erstellen und oben in den Text statt Item X immer das jeweilige Item reinschreiben, aber wenn ich dann etwas ändern möchte, muss ich immer alle 30 Fragen durchgehen und die Änderungen machen, deshalb wäre eine Schleife praktisch und vorab eine Liste mit allen Items als interne Variable, dann muss ich gegebenfalls nur die Liste ändern bzw. die eine Frage.

Danke!
by SoSci Survey (327k points)
Okay, also die Abfrage der Namen (offene Texteingabe, vermute ich) verstehe ich. Das ist Frage NL01, ja?

Und 30 Fragen (welche Kennungen?) mit jeweils 10 Items verstehe ich auch. Auch wenn das eine ganze Menge Fragen sind, sie Sie da pro Name stellen ... aber ich vermute mal, Sie haben sich dabei etwas gedacht.

> Die Platzhalter für die Items, die sich auf die interne Variable beziehen funktionieren nicht.

Aber wo sind nun die internen Variablen und wofür sind diese gut?

> Natürlich könnte ich einfach 30 solche Fragen mit jeweils 10 Schiebereglern erstellen und oben in den Text statt Item X immer das jeweilige Item reinschreiben

Nun, Sie können natürlich auch hier Platzhalter verwenden. Diese können Sie entweder fix belegen ...

replace('%item1%', 'Text Nummer 1');

... oder Sie können auch den Text aus der ersten Frage verwenden:

replace('%item1%', getItemtext('AB01', 1));

Und das natürlich auch bequem als Schleife:

foreach (getItems('AB01') as $itemNo) {
  replace('%item'.$itemNo.'%', getItemtext('AB01', $itemNo));
}
by s075713 (120 points)
> Okay, also die Abfrage der Namen (offene Texteingabe, vermute ich) verstehe ich. Das ist Frage NL01, ja?

Ja genau.


>Und 30 Fragen (welche Kennungen?) mit jeweils 10 Items verstehe ich auch. Auch wenn das eine ganze Menge Fragen sind, sie Sie da pro Name stellen ... aber ich vermute mal, Sie haben sich dabei etwas gedacht.

Ja, da hab ich mir was dabei gedacht ;)
Die Kennung ist IT01-IT30.


>Aber wo sind nun die internen Variablen und wofür sind diese gut?

Die Interne Variable habe ich nach der Namensabfrage (NL01) und vor den 30 Fragen (IT01...IT30) platziert. Sie beinhaltet einfach eine Liste aller Items, die in den 30 Fragen mit den jeweils 10 Schiebereglern abgefragt werden sollen.
Die Kennung für die internen Variablen sind IL01_01.....IL01_30.
Somit muss ich -wenn sich die Items ändern- nur die Liste ändern und nicht jede Frage durchgehen und die Items im Fragetext (Bewerten Sie Ihre Freunde in dem Item X) oder Code ändern.
Daher möchte ich die Platzhalter auch nicht fix mit Text belegen und ich kann sie nicht aus der ersten Frage verwenden, weil die Items ja nie abgefragt werden - ich möchte diese Liste ja nur eingeben, aber die Versuchsperson soll die nie sehen. Ist das möglich?


>Und das natürlich auch bequem als Schleife

Ihre Schleife ändert nur die Items, richtig? Ich bräuchte eine Schleife, die die Frage mit den 10 Schieberegler  (IT01) 30x anzeigt mit jeweils einem Item aus der internen Variable (IL01_01 bis IL01_30).
by SoSci Survey (327k points)
Anstatt der internen Variablen könnten Sie auch einfach ein Array definieren und mittels registerVariable() für den Fragebogne verfügbar machen. Aber wenn Sie möchten, bleiben Sie bei den internen Variablen.

>  Ich bräuchte eine Schleife, die die Frage mit den 10 Schieberegler  (IT01) 30x anzeigt

Jetzt wäre es relevant, welche Datenstruktur Sie am Ende für die Auswertung benötigen.

Sie haben zwei Möglichkeiten: (a) Sie kopieren die Frage 29-mal und zeigen jedes Mal eine andere oder (b) Sie erzeugen für jedes Item einen eigenen Datensatz. Bitte lesen Sie dazu einmal den Anfang der folgenden Anleitung: https://www.soscisurvey.de/help/doku.php/de:create:multilevel
by s075713 (120 points)
Wie gesagt funktionieren die Platzhalter mit der internen Variable nicht.

Ich möchte nur einen Datensatz und nicht für jedes Item einen eigenen. Also werde ich die Frage einfach 29 x kopieren und die items reinschreiben, das ist zwar recht umständlich vorallem falls ich nachträglich mal was ändern möchte, aber erscheint mir nun die schnellste Lösung.

Danke
by SoSci Survey (327k points)
> Wie gesagt funktionieren die Platzhalter mit der internen Variable nicht.

Wenn Sie getItemtext() verwenden (s.o.), dann schon. Die "response" Option kann nicht fuktionieren, weil der Text ja als Itemtext vermerkt ist und nicht als Antwort in der Variable.

> Also werde ich die Frage einfach 29 x kopieren und die items reinschreiben

Platzhalter können Sie unabhängig von der Datenstruktur verwenden. Also auch für die Items.

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

...