0 votes
in SoSci Survey (dt.) by s019398 (115 points)

Liebes Soscisurvey-Team,
ich möchte gerne folgendes in soscisurvey umsetzen:
Den Teilnehmern meiner Befragung sollen aus einem Pool von ca.500 Items 50 Items vorgelegt werden, zu welchen sie jeweils zwei Fragen beantworten sollen (die Möglichkeit Items zu überspringen gibt es nicht).
Um das in Soscisurvey umzusetzen habe ich den Zufallsgenerator genutzt und meine beiden Fragen mit Platzhaltern ausgestattet. Solange ich keine Multi-Level Struktur verwende und meine beiden Fragen jeweils für alle 50 Items auf einer Fragebogenseite abfrage klappt alles wunderbar.
Bei dem Versuch eine Multi-level Struktur zu programmieren habe ich mich an dem Anwendungsbeispiel zu randomuse orientiert.
Folgende Multi-Level Struktur würde ich in meinen Fragebogen gerne umsetzen:

  • Seite 1 (top-FB): Zufallsgenerator & Frage 1 zu den zufällig gezogenen Items
  • Wechsel zu sub-FB
  • Frage 2 zu den zufällig gezogenen Items aus top-FB
  • Wechsel zu top-FB

Was bei mir unter anderem nicht geklappt hat ist die gezogenen Items aus dem Zufallsgenerator (top) mit der Frage aus dem sub-FB zu verknüpfen. Hier kam die Meldung, dass der Platzhalter nicht belegt ist. Füge ich den Zufallsgenerator aber auch im sub-FB ein so werden die Items neu gezogen und stimmen nicht mit den Items aus der Ziehung im top-FB überein. Wie kann ich diese Information auf die nächste Seite des FBs (egal ob top oder sub) mitnehmen?

Außerdem möchte ich den Teilnehmern die zufälligen Items nicht einzeln (wie in dem Bsp beschrieben) sondern als komplette Liste präsentieren. Ich habe daher folgende Codeschnipsel genutzt, was leider nicht funktioniert hat:

top: Seite 1
Zufallsgenerator (CA01)
Frage (CA02)

multiLevelDown('sub', $codes[$i]);
randomUse('CA01', array());

sub: Seite 1

$itemID = multiLevelData();
put('IV01_01', $itemID);
question('CA03')

Frage (CA03)

sub: Seite 2

multiLevelReturn;

Vielen Dank für Eure Unterstützung!

by SoSci Survey (327k points)
Könnten Sie bitte noch kurz mitteilen, wie Sie die Platzhalter (in der alten Version wo es funktionierte) belegt haben? Danke.
by s019398 (115 points)
Mit:
$name = value('CA01x01', 'label');
replace('%actor1%', $name);
$name = value('CA01x02', 'label');
replace('%actor2%', $name);
usw. bis actor50

1 Answer

0 votes
by SoSci Survey (327k points)

Danke für die Ergänzung. Der Trick besteht nun darin, dass Sie nicht nur den Code für den gezogenen Namen an den untergeordneten Fragebogen übergeben, sondern auch den Namen:

if (!isset($order)) {
  $order = getItems('CA01');
  shuffle($order);
}
$i = loopToPage('loopEnd');
$item = $order[$i];

multiLevelDown('sub', array(
  'code' => value(id('CA01', $item)),
  'name' => value(id('CA01', $item), 'label')
);

Im untergeordneten Fragebogen brauchen Sie dann nur noch einen Platzhalter %actor%.

$data = multiLevelData();
put('IV01_01', $data['code']);
replace('%actor%', $data['name']);
question('CA03');
by s019398 (115 points)
Vielen Dank!
Jetzt funktioniert der Wechsel vom top zum sub und wieder zurück.
Allerdings wird mir CA03 nicht richtig angezeigt.
Ich habe meine Platzhalter gelöscht und nur noch einen Platzhalter %actor% aufgenommen, wie Sie geschrieben haben.  
Jetzt erhalte ich jedoch folgende Fehlermeldung:

"Questionnaire Error (page 1)
The command put() has been used with the label IV01_01. There is no label with this ID. If this is the ID of an "internal variables&qupt; question, please give the ID of one of its variables."

Und mir wird statt einer Liste von 50 Namen nur ein Item (eine Zahl) angezeigt.
Wissen Sie woran das liegt?
by SoSci Survey (327k points)
> The command put() has been used with the label IV01_01. There is no label with this ID.

Haben Sie denn im Fragenkatalog eine Frage "interne Variablen" mit der ID IV01? Wenn nicht, dann müssten Sie statt IV01 die Kennung der internen Variable angeben.

> Und mir wird statt einer Liste von 50 Namen nur ein Item (eine Zahl) angezeigt.

Was die Zahl angeht: Ergänzen Sie bitte eine Zeile mit debug() und posten Sie kurz, was im Debug-Modus angezeigt wird:

$data = multiLevelData();
debug($data);

Was 1 vs. 50 angeht: Die Multi-Level-Lösung fragt jeden der 50 Namen auf einer einzelnen Seite ab. Wenn Sie alle "en block" abfragen möchten, ist die Multi-Level-Struktur nicht geeignet.
by s019398 (115 points)
Vielen Dank!
Das Problem mit der internen Variable habe ich korrigiert.
Hier ist die Debug-Info zu dem Anzeigeproblem:
[Information]    Interview started (new case no. 79)
[Information]    Questionnaire US from project ExpertsurveyIII will be used
[Processing]    Create questionnaire page no. 2
[Information]    value("CA01") = ???
[Information]    value("CA01") = ???
[Information]    Interview number 80 is to be continued
[Processing]    Create questionnaire page no. 1
[Information]    The internal variable CA04_01 gets a value of .
[Content]    Create question CA03
[Information]    The following placeholders have been prepared:
%actor% = (text)

Wenn ich nur die Zufallsauswahl der Namen von der Seite davor übertragen möchte, um diese en block abzufragen, dann reicht folgender Code, oder?
if (!isset($order)) {
  $order = getItems('CA01');
  shuffle($order);
}
by SoSci Survey (327k points)
Durch das debug($data) müsste im Fragebogen noch angezeigt werden, was in der Variable $data gespeichert ist? Das Ganze funktioniert natürlich nur, wenn der Fragebogen nicht direkt, sondern aus dem übergeordneten Fragebogen heraus aufgerufen wird.

> Wenn ich nur die Zufallsauswahl der Namen von der Seite davor übertragen möchte, um diese en block abzufragen, dann reicht folgender Code, oder?

Genau genommen kann dieser Block eigentlich ganz raus (das würde nur zu einer doppelten Rotation führen). Ersetzen Sie ihn ggf. wie folgt:

$i = loopToPage('loopEnd');
$item = $i + 1;
multiLevelDown('sub', array(
  'code' => value(id('CA01', $item)),
  'name' => value(id('CA01', $item), 'label')
);

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

...