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

Liebes SoSciSurvey-Team,

ich möchte zwei Randomisierungen nacheinander machen (auf zwei verschiedenen Seiten). Wie kann ich die Ziehung der ersten Randomisierung speichern, um die Auswahlmöglichkeiten für die zweite Randomisierung einzugrenzen?

Z.B.

  • erste Randomisierung mit 24 Auswahlmöglichkeiten (24 Fragen)
  • zweite Randomisierung hat ebenfalls grundsätzlich 24 Auswahlmöglichkeiten, aber wenn z.b. in der ersten Ziehung 01 gewählt wurde, sollen die Auswahlmöglichkeiten für die zweite Ziehung eingeschränkt werden (z.b. nur Fragen 15-24)

Wie kann ich also das erste Ergebnis speichern, um das auf der zweiten Seite weiterzuverwenden? Und setze ich das mit zwei eigenen Randomisierungen um, oder geht das auch mit einer Randomisierung?

by s272143 (120 points)
Noch als Zusatzinfo: die 24 Auswahlmöglichkeiten sind bei beiden Ziehungen die gleichen (sollen nur eben beim zweiten Mal auf Grund der ersten Ziehung eingeschränkt werden)

1 Answer

0 votes
by SoSci Survey (316k points)

Das "Speichern" erledigen sie am einfachsten dadurch, dass Sie für die erste Ziehung einen Zufallsgenerator verwenden. Dieser speichert die Ziehung direkt in den Datensatz.

Was die Einschränkung der zweiten Ziehung angeht, kommt es auf die genauen Regeln an. Je nach konkreter Verwendung kann man die zweite Ziehung gleich zusammen mit der ersten erledigen (z.B. wenn man dasselbe oder gegenseitig ausschließlich ziehen will) oder man kann mit einem zweiten Zufallsgenerator und den filter Parameter im show()-Befehl arbeiten. Details gerne auf Nachfrage.

by s272143 (120 points)
Wir verwenden für die erste Ziehung bereits einen Zufallsgenerator. Jedoch scheint das Ergebnis nicht auf die nächste Seite weitergegeben zu werden. Denn obwohl wir die zweite Ziehung einschränken, zieht es trotzdem noch teilweise das Falsche.

Bzw. kann ich die zweite Ziehung direkt danach machen, und das Ergebnis wird aber erst auf der nächsten Seite angezeigt?
Wie würde das mit dem filter und show() Befehl funktionieren?
by SoSci Survey (316k points)
> Jedoch scheint das Ergebnis nicht auf die nächste Seite weitergegeben zu werden.

Der Zufallsgenerator hat eine oder (falls Sie mehrere Zettel ziehen) mehrere Variablen, in welchen die Ziehung im Datensatz hinterlegt ist. Mit value() können Sie das auf allen folgenden Seiten auslesen.

> Wie würde das mit dem filter und show() Befehl funktionieren?

Das kommt darauf an, wie genau die Einschränkung der zweiten Ziehung auf Basis der ersten Ziehung aussehen soll. Das haben Sie noch nicht im Detail erklärt.
by s206978 (100 points)
Vielen Dank für die bisherigen Antworten und Tipps.

In Abhängigkeit von der ersten Ziehung kommen immer nur 9 der 24 Optionen für die zweite Ziehung in Frage. Wenn z.B. bei der ersten Ziehung Option 01 gezogen wurde, sollten in der zweiten Ziehung nur die Optionen 16-24 berücksichtigt werden. Oder wenn z.B. bei der ersten Ziehung Option 04 gezogen wurde, sollten in der zweiten Ziehung nur Optionen 13-15 und 19-24 berücksichtigt werden.

Wie können wir das realisieren? Wir wissen nicht, wie man den filter-Befehl mit PHP verwendet.

Vielen Dank im Voraus!
by SoSci Survey (316k points)
Als erstes benötigen Sie eine Liste, welche diese Abhängigkeit definiert:

$available = [
  1 => [16,17,18,19,20,21,22,23,24],
  4 => [13,14,15,19,20,21,22,23,24],
  // u.s.w.
];

Und dann verwenden Sie diese Information für den Filter-Parameter:

$random1 = value('RG01');  // Erste Ziehung auslesen
$use = $available[$random1];  // Die passende Liste auslesen
show('RG02', ['filter' => $use]);  // Zweite Ziehung

Bitte beachten Sie, dass der Zufallsgenerator in der zweiten Ziehung versuchen wird, dass alle Optionen gleich häufig gezogen werden - über alle Teilnehmer:innen hinweg. Wenn ein Code also bei mehr Ziehungen aus Runde 1 vorkommt, wird dieser in der zweiten Runde pro Person geringere Chancen haben.
by s206978 (100 points)
Vielen Dnak, ich habe es versucht. Doch es werden weiterhin in der zweiten Ziehung Optionen gezogen, die ich nicht zulassen möchte.

Das sind die PHP-Codes. Können Sie einen Fehler erkennen?


Code auf der ersten Seite nach RD07 auf Seite davor:

if (value('RD07') == '01') {
  question('VI02');
} elseif (value('RD07') == '02') {
  question('VI10');
} elseif (value('RD07') == '03') {
  question('VI11');
} elseif (value('RD07') == '04') {
  question('VI05');
} elseif (value('RD07') == '05') {
  question('VI12');
} elseif (value('RD07') == '06') {
  question('VI13');
} elseif (value('RD07') == '07') {
  question('VI06');
} elseif (value('RD07') == '08') {
  question('VI14');
} elseif (value('RD07') == '09') {
  question('VI15');
} elseif (value('RD07') == '10') {
  question('VI07');
} elseif (value('RD07') == '11') {
  question('VI16');
} elseif (value('RD07') == '12') {
  question('VI17');

} elseif (value('RD07') == '13') {
  question('VI01');
} elseif (value('RD07') == '14') {
  question('VI19');
} elseif (value('RD07') == '15') {
  question('VI18');
} elseif (value('RD07') == '16') {
  question('VI08');
} elseif (value('RD07') == '17') {
  question('VI20');
} elseif (value('RD07') == '18') {
  question('VI21');
} elseif (value('RD07') == '19') {
  question('VI03');
} elseif (value('RD07') == '20') {
  question('VI22');
} elseif (value('RD07') == '21') {
  question('VI23');
} elseif (value('RD07') == '22') {
  question('VI04');
} elseif (value('RD07') == '23') {
  question('VI24');
} elseif (value('RD07') == '24') {
  question('VI25');
}


Code auf der zweiten Seite nach RD08 auf vorheriger Seite:

$available = [
  1 => [16, 17, 18, 19, 20, 21, 22, 23, 24],
  2 => [16, 17, 18, 19, 20, 21, 22, 23, 24],
  3 => [16, 17, 18, 19, 20, 21, 22, 23, 24],

  4 => [13, 14, 15, 19, 20, 21, 22, 23, 24],
  5 => [13, 14, 15, 19, 20, 21, 22, 23, 24],
  6 => [13, 14, 15, 19, 20, 21, 22, 23, 24],

  7 => [13, 14, 15, 16, 17, 18, 22, 23, 24],
  8 => [13, 14, 15, 16, 17, 18, 22, 23, 24],
  9 => [13, 14, 15, 16, 17, 18, 22, 23, 24],

  10 => [13, 14, 15, 16, 17, 18, 19, 20, 21],
  11 => [13, 14, 15, 16, 17, 18, 19, 20, 21],
  12 => [13, 14, 15, 16, 17, 18, 19, 20, 21],

  13 => [04, 05, 06, 07, 08, 09, 10, 11, 12],
  14 => [04, 05, 06, 07, 08, 09, 10, 11, 12],
  15 => [04, 05, 06, 07, 08, 09, 10, 11, 12],

  16 => [01, 02, 03, 07, 08, 09, 10, 11, 12],
  17 => [01, 02, 03, 07, 08, 09, 10, 11, 12],
  18 => [01, 02, 03, 07, 08, 09, 10, 11, 12],

  19 => [01, 02, 03, 04, 05, 06, 10, 11, 12],
  20 => [01, 02, 03, 04, 05, 06, 10, 11, 12],
  21 => [01, 02, 03, 04, 05, 06, 10, 11, 12],

  22 => [01, 02, 03, 04, 05, 06, 07, 08, 09],
  23 => [01, 02, 03, 04, 05, 06, 07, 08, 09],
  24 => [01, 02, 03, 04, 05, 06, 07, 08, 09]
];

$random1 = value('RD07');
$use = $available[$random1];
show('RD08', ['filter' => $use]);
if (value('RD08') == '01') {
  question('VI02');
} elseif (value('RD08') == '02') {
  question('VI10');
} elseif (value('RD08') == '03') {
  question('VI11');
} elseif (value('RD08') == '04') {
  question('VI05');
} elseif (value('RD08') == '05') {
  question('VI12');
} elseif (value('RD08') == '06') {
  question('VI13');
} elseif (value('RD08') == '07') {
  question('VI06');
} elseif (value('RD08') == '08') {
  question('VI14');
} elseif (value('RD08') == '09') {
  question('VI15');
} elseif (value('RD08') == '10') {
  question('VI07');
} elseif (value('RD08') == '11') {
  question('VI16');
} elseif (value('RD08') == '12') {
  question('VI17');

} elseif (value('RD08') == '13') {
  question('VI01');
} elseif (value('RD08') == '14') {
  question('VI19');
} elseif (value('RD08') == '15') {
  question('VI18');
} elseif (value('RD08') == '16') {
  question('VI08');
} elseif (value('RD08') == '17') {
  question('VI20');
} elseif (value('RD08') == '18') {
  question('VI21');
} elseif (value('RD08') == '19') {
  question('VI03');
} elseif (value('RD08') == '20') {
  question('VI22');
} elseif (value('RD08') == '21') {
  question('VI23');
} elseif (value('RD08') == '22') {
  question('VI04');
} elseif (value('RD08') == '23') {
  question('VI24');
} elseif (value('RD08') == '24') {
  question('VI25');
}
by SoSci Survey (316k points)
Was sagt denn die Debug-Information auf der zweiten Seite?

Ergänzen Sie bitte vor dem der Zeile

show('RD08', ['filter' => $use]);

noch ein

debug($use);
by s272143 (120 points)
Das kommt z.b. als Debug-Information:

Debug-Information für $use:
(0)16, (1)17, (2)18, (3)19, (4)20, (5)21, (6)22, (7)23, (8)24

oder hier (hier hat es z.b. nicht funktioniert und es wurde eine zweite Ziehung ausgewählt, die eigentlich ausgeschlossen ist)

Debug-Information für $use:
(0)4, (1)5, (2)6, (3)7, (4)8, (5)9, (6)10, (7)11, (8)12
by SoSci Survey (316k points)
Bitte posten Sie die vollständige Debug-Information, danke:
https://www.soscisurvey.de/help/doku.php/de:create:debugging
by s272143 (120 points)
debug()    Inhalt: 013, 114, 215, 319, 420, 521, 622, 723, 824
[Information]    Der Zufallsgenerator RD08 wurde bereits zu einem früheren Zeitpunkt im Interview verwendet, die gezogenen Codes bleiben unverändert: 9
[Information]    value("RD08") = 9
[Information]    value("RD08") = 9
[Information]    value("RD08") = 9
[Information]    value("RD08") = 9
[Information]    value("RD08") = 9
[Information]    value("RD08") = 9
[Information]    value("RD08") = 9
[Information]    value("RD08") = 9
[Information]    value("RD08") = 9
by SoSci Survey (316k points)
Oberhalb müsste noch stehen, was der PHP-Code für value('RD07') ermittelt hat. Mit diesem Ausschnitt kann ich den Fehler im Code leider nicht erkennen.

Sie haben RD08 nicht (!) zusätzlich noch in die Seite gezogen, oder?
by s272143 (120 points)
RD08 war zusätzlich auf der Seite - daran liegt dann wohl der Fehler. Jetzt funktioniert es einwandfrei. Vielen vielen Dank!!!

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

...