0 votes
in SoSci Survey (dt.) by s273725 (110 points)
edited by SoSci Survey

Für meine Datenerhebung arbeite ich mit einem Panel-Anbieter zusammen und habe dementsprechend Quoten für das Alter, Geschlecht, den Bildungsstatus und das Bundesland vorgegeben. Ich habe die Redirects vom Pandel Provider erhalten und mich dementsprechend an die Umsetzung der Quotierung (unverbundene Quoten) in SoSci-Survey gemacht. Ich habe mich an der technischen Umsetzung für unverbundene Quoten orientiert und die PHP-Codes wie beschrieben in der Seite nach den soziodemografischen Daten eingefügt, damit die Proband/-innen direkt eine Rückmeldung erhalten, ob sie noch an der Umfrage teilnehmen können. Nun kommen wir zu meinem Problem. Ich habe den Fragebogen getestet und bei jeder Durchführung wird mir die folgende Meldung angezeigt "Vielen Dank für Ihre Teilnahme! Leider gehören Sie bei dieser Umfrage nicht zur gesuchten Zielgruppe.". Ich bin nun überfragt wie ich dieses Problem lösen kann, weil ich mich 1:1 an den PHP-Codes von SoSci-Survey orientiert habe.

Hier mein PHP-Code (Seite direkt nach den soziodemografischen Daten).

$quotaAge = [
  1 => 380,  // 380 Personen in Altersgruppe 1 (18-22 Jahre)
  2 => 380,  // 380 Personen in Altersgruppe 2 (23-26 Jahre)
];
$quotaGender = [
  1 => 380,  // 380 Frauen (Code 1)
  2 => 380   // 380 Männer (Code 2)
];
$quotaEducation = [
  2 => 494,  // 494 Personen in Bildungsgruppe 1 (Haupt- und Mittlerer Schulabschluss) 
  3 => 380   // 380 Personen in Bildungsgruppe 2 (Fachhochschul- oder Hochschulreife)
];
$quotaRegion = [
  1 => 167,  // 167 aus NRW (Code 10)
  2 => 121,   // 121 aus BAY (Code 2)
  3 => 106,   // 106 aus BAWÜ (Code 1)
  4 => 76,   // 76 aus NDS (Code 9)
  5 => 61,   // 61 aus HS Männer (Code 7)
  6 => 38,   // 38 aus RLP (Code 11)
  7 => 34,   // 34 aus SACH (Code 14)
  8 => 34,   // 34 aus BER (Code 3)
  9 => 27,   // 27 aus SH (Code 15)
  10 => 15,   // 15 aus BB (Code 4)
  11 => 15,   // 15 aus SA (Code 13)
  12 => 15,   // 15 aus TH (Code 2)
  13 => 19,   // 19 aus HH (Code 6)
  14 => 15,   // 15 aus MV (Code 8)
  15 => 8,   // 8 aus SL (Code 12)
  16 => 8,   // 8 aus BRE (Code 5)
];

// Gender wird direkt ausgelesen
$gender = value('SD01');
// Region wird direkt ausgelesen
$region = value('SD05');
// Das Alter wird umkodiert
$age = value('SD02_01');
if ($age <= 22) {
  $ageGroup = 1;
} else {
  $ageGroup = 2;
}
// Die Education wird umkodiert
$education = value('SD03_01');
if ($education <= 2) {
  $educationGroup = 1;
} elseif ($education <= 4) {
  $educationGroup = 2;
} elseif ($education = 5) {
  $educationGroup = 3;
} else {
  $educationGroup = 4;
}

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesAge    = statistic('count', 'SD10_01', $ageGroup);
$casesGender = statistic('count', 'SD09_01', $gender);
$casesEducation = statistic('count', 'SD11_01', $educationGroup);
$casesRegion = statistic('count', 'SD12_01', $region);

// Screenout
if (!array_key_exists($ageGroup, $quotaAge) || !array_key_exists($gender, $quotaGender) || !array_key_exists($educationGroup, $quotaEducation) || !array_key_exists($region, $quotaRegion)) {
  redirect('https://survey.maximiles.com/screenout?p=128822_07358555&m=%SPM_PANELIST_ID%');
}

// Auslesen der Quoten für die angegeben Merkmale
$maxPerAge    = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
$maxPerEducation = $quotaeducation[$educationGroup];
$maxPerRegion = $quotaRegion[$region];

// Quotenstopp
if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender) || ($casesEducation >= $maxPerEducation)|| ($casesRegion >= $maxPerRegion)) {
  redirect('https://survey.maximiles.com/quotasfull?p=128822_5898d2e3&m=%SPM_PANELIST_ID%');
}

Hier mein PHP-Code (vorletzte Seite).
// Gender wird direkt ausgelesen
$gender = value('SD01');
// Region wird direkt ausgelesen
$region = value('SD05');
// Das Alter wird umkodiert
$age = value('SD02_01');
if ($age <= 22) {
  $ageGroup = 1;
} else {
  $ageGroup = 2;
}
// Die Education wird umkodiert
$education = value('SD03_01');
if ($education <= 2) {
  $educationGroup = 1;
} elseif ($education <= 4) {
  $educationGroup = 2;
} elseif ($education = 5) {
  $educationGroup = 3;
} else {
  $educationGroup = 4;
}

put('SD10_01', $ageGroup);
put('SD09_01', $gender);
put('SD11_01', $educationGroup);
put('SD12_01', $region);

1 Answer

0 votes
by SoSci Survey (327k points)

Bitte folgen Sie der Anleitung Quotierung -> Fehlersuche, um das Problem einzugrenzen. Wenn Sie die Ausgabe hier posten (am besten als Kommentar unter diese Antwort), kann ich gerne weiterhelfen.

by s273725 (110 points)
Anbei die Ausgabe auf der Seite 4 (Quotenseite, die Seite nach den Soziodemografischen Daten). Ich habe bei den soziodemografischen Daten Merkmale eingegeben, die unserem Sample entsprechen.

Ausgabe Debug-Informationen:
[Information]    Interview Nummer 402 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt milkalternatives wird verwendet
[Information]    Die Verweildauer auf Seite 3 war 14 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3
[Information]    Antwort auf SD01 = 2
[Information]    Keine Antwort für SD01_04
[Information]    Antwort auf SD02_01 = 19
[Information]    Antwort auf SD03 = 4
[Information]    Keine Antwort für SD03_06
[Information]    Antwort auf SD04 = 4
[Information]    Keine Antwort für SD04_10
[Information]    Antwort auf SD05 = 3
[Information]    Antwort auf SD06 = 1
[Information]    Antwort auf SD07 = 3
[Information]    Keine Antwort für SD07_04
[Information]    Bedingung in Filter SD07/1 ist nicht erfüllt.
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 4 in Fragebogen base
[Information]    value("SD01") = 2
[Information]    value("SD05") = 3
[Information]    value("SD02_01") = 19
[Information]    value("SD03") = 4
debug()    Inhalt: $casesAge = 2 (integer)
debug()    Inhalt: $maxPerAge = 380 (integer)
debug()    Inhalt: $casesGender = 0 (integer)
debug()    Inhalt: $maxPerGender = 380 (integer)
debug()    Inhalt: $casesEducation = 0 (integer)
debug()    Inhalt: $maxPerEducation = 494 (integer)
debug()    Inhalt: $casesRegion = 0 (integer)
debug()    Inhalt: $maxPerRegion = 106 (integer)
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 5
[Information]    Entsprechend Filter SD07/F1 wird Seite 5 (SD P) nicht angezeigt.
[Verarbeitung]    Erstelle Seite 6 in Fragebogen base
[Inhalt]    Erstelle Frage TI02
[Inhalt]    Erstelle Frage TX04
[Inhalt]    Erstelle Frage DH01
[Inhalt]    Erstelle Frage DH02
[Inhalt]    Erstelle Frage DH03
by SoSci Survey (327k points)
Die Zahlen bei debug() sehen alle gut aus. Da dürfte eigentlich keine Weiterleitung ausgelöst werden. Haben Sie statt dem `redirect()` ein `html()` oder `debug()` eingesetzt, um zu sehen, an welcher Stelle die (falsche) Weiterleitung erfolgt? Es war eine Weitereleitung zum Quota-Full-Link erfolgt, oder?

Das einzige, was ich spontan sehe ist, dass Sie $quotaEducation mein. einmal mit einem kleinen "e" geschrieben haben, Bitte vereinheitlichen Sie das noch.
by s273725 (110 points)
Ja, das habe ich gemacht entsprechend der Anleitung. Ich habe den Redirect deaktiviert und mir die Quotenzählung anzeigen lassen. Das ist mein modifizierter PHP-Code dafür, bei welchem ich die obigen Debug-Informationen erhalte. Wenn ich den Redirect wieder aktiviere, erhalte ich die Meldung, dass ich nicht zu der gesuchten Befragungsgruppe gehöre:
"Vielen Dank für Ihre Teilnahme! Leider gehören Sie bei dieser Umfrage nicht zur gesuchten Zielgruppe."
Ich habe ebenfalls den Panel-Provider kontaktiert und dieser meinte, dass die Redirects bei solch einer Meldung scheinbar noch nicht richtig implementiert sind.

PHP-Code (Fehleranzeige)
$quotaAge = [
  1 => 380,  // 380 Personen in Altersgruppe 1 (18-22 Jahre)
  2 => 380,  // 380 Personen in Altersgruppe 2 (23-26 Jahre)
];
$quotaGender = [
  1 => 380,  // 380 Frauen (Code 1)
  2 => 380   // 380 Männer (Code 2)
];
$quotaEducation = [
  2 => 494,  // 494 Personen in Bildungsgruppe 1 (Haupt- und Mittlerer Schulabschluss)
  3 => 380   // 380 Personen in Bildungsgruppe 2 (Fachhochschul- oder Hochschulreife)
];
$quotaRegion = [
  1 => 167,  // 167 aus NRW (Code 10)
  2 => 121,   // 121 aus BAY (Code 2)
  3 => 106,   // 106 aus BAWÜ (Code 1)
  4 => 76,   // 76 aus NDS (Code 9)
  5 => 61,   // 61 aus HS Männer (Code 7)
  6 => 38,   // 38 aus RLP (Code 11)
  7 => 34,   // 34 aus SACH (Code 14)
  8 => 34,   // 34 aus BER (Code 3)
  9 => 27,   // 27 aus SH (Code 15)
  10 => 15,   // 15 aus BB (Code 4)
  11 => 15,   // 15 aus SA (Code 13)
  12 => 15,   // 15 aus TH (Code 2)
  13 => 19,   // 19 aus HH (Code 6)
  14 => 15,   // 15 aus MV (Code 8)
  15 => 8,   // 8 aus SL (Code 12)
  16 => 8,   // 8 aus BRE (Code 5)
];

// Gender wird direkt ausgelesen
$gender = value('SD01');
// Region wird direkt ausgelesen
$region = value('SD05');
// Das Alter wird umkodiert
$age = value('SD02_01');
if ($age <= 22) {
  $ageGroup = 1;
} else {
  $ageGroup = 2;
}
// Die Education wird umkodiert
$education = value('SD03');
if ($education <= 2) {
  $educationGroup = 1;
} elseif ($education <= 4) {
  $educationGroup = 2;
} elseif ($education = 5) {
  $educationGroup = 3;
} else {
  $educationGroup = 4;
}

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesAge    = statistic('count', 'SD10_01', $ageGroup);
$casesGender = statistic('count', 'SD09_01', $gender);
$casesEducation = statistic('count', 'SD11_01', $educationGroup);
$casesRegion = statistic('count', 'SD12_01', $region);

// Screenout
if (!array_key_exists($ageGroup, $quotaAge) || !array_key_exists($gender, $quotaGender) || !array_key_exists($educationGroup, $quotaEducation) || !array_key_exists($region, $quotaRegion)) {
  redirect('https://survey.maximiles.com/screenout?p=128822_07358555&m=%SPM_PANELIST_ID%');
}

// Auslesen der Quoten für die angegeben Merkmale
$maxPerAge    = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
$maxPerEducation = $quotaEducation[$educationGroup];
$maxPerRegion = $quotaRegion[$region];

// Zusätze Informationen anzeigen
debug($casesAge);
debug($maxPerAge);
debug($casesGender);
debug($maxPerGender);
debug($casesEducation);
debug($maxPerEducation);
debug($casesRegion);
debug($maxPerRegion);

// Auslesen der Quoten für die angegeben Merkmale
$maxPerAge    = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
$maxPerEducation    = $quotaEducation[$educationGroup];
$maxPerRegion = $quotaRegion[$region];

// Quotenstopp
if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender) || ($casesEducation >= $maxPerEducation)|| ($casesRegion >= $maxPerRegion)) {
  // redirect('https://survey.maximiles.com/quotasfull?p=128822_5898d2e3&m=%SPM_PANELIST_ID%');
html('<p>Redirect ausgelöst</p>');
  pageStop();
}

PHP-Code (ohne redirect deaktiviert)
$quotaAge = [
  1 => 380,  // 380 Personen in Altersgruppe 1 (18-22 Jahre)
  2 => 380,  // 380 Personen in Altersgruppe 2 (23-26 Jahre)
];
$quotaGender = [
  1 => 380,  // 380 Frauen (Code 1)
  2 => 380   // 380 Männer (Code 2)
];
$quotaEducation = [
  2 => 494,  // 494 Personen in Bildungsgruppe 1 (Haupt- und Mittlerer Schulabschluss)
  3 => 380   // 380 Personen in Bildungsgruppe 2 (Fachhochschul- oder Hochschulreife)
];
$quotaRegion = [
  1 => 167,  // 167 aus NRW (Code 10)
  2 => 121,   // 121 aus BAY (Code 2)
  3 => 106,   // 106 aus BAWÜ (Code 1)
  4 => 76,   // 76 aus NDS (Code 9)
  5 => 61,   // 61 aus HS Männer (Code 7)
  6 => 38,   // 38 aus RLP (Code 11)
  7 => 34,   // 34 aus SACH (Code 14)
  8 => 34,   // 34 aus BER (Code 3)
  9 => 27,   // 27 aus SH (Code 15)
  10 => 15,   // 15 aus BB (Code 4)
  11 => 15,   // 15 aus SA (Code 13)
  12 => 15,   // 15 aus TH (Code 2)
  13 => 19,   // 19 aus HH (Code 6)
  14 => 15,   // 15 aus MV (Code 8)
  15 => 8,   // 8 aus SL (Code 12)
  16 => 8,   // 8 aus BRE (Code 5)
];

// Gender wird direkt ausgelesen
$gender = value('SD01');
// Region wird direkt ausgelesen
$region = value('SD05');
// Das Alter wird umkodiert
$age = value('SD02_01');
if ($age <= 22) {
  $ageGroup = 1;
} else {
  $ageGroup = 2;
}
// Die Education wird umkodiert
$education = value('SD03');
if ($education <= 2) {
  $educationGroup = 1;
} elseif ($education <= 4) {
  $educationGroup = 2;
} elseif ($education = 5) {
  $educationGroup = 3;
} else {
  $educationGroup = 4;
}

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesAge    = statistic('count', 'SD10_01', $ageGroup);
$casesGender = statistic('count', 'SD09_01', $gender);
$casesEducation = statistic('count', 'SD11_01', $educationGroup);
$casesRegion = statistic('count', 'SD12_01', $region);

// Screenout
if (!array_key_exists($ageGroup, $quotaAge) || !array_key_exists($gender, $quotaGender) || !array_key_exists($educationGroup, $quotaEducation) || !array_key_exists($region, $quotaRegion)) {
  redirect('https://survey.maximiles.com/screenout?p=128822_07358555&m=%SPM_PANELIST_ID%');
}

// Auslesen der Quoten für die angegeben Merkmale
$maxPerAge    = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
$maxPerEducation = $quotaEducation[$educationGroup];
$maxPerRegion = $quotaRegion[$region];

// Zusätze Informationen anzeigen
debug($casesAge);
debug($maxPerAge);
debug($casesGender);
debug($maxPerGender);
debug($casesEducation);
debug($maxPerEducation);
debug($casesRegion);
debug($maxPerRegion);

// Auslesen der Quoten für die angegeben Merkmale
$maxPerAge    = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
$maxPerEducation    = $quotaEducation[$educationGroup];
$maxPerRegion = $quotaRegion[$region];

// Quotenstopp
if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender) || ($casesEducation >= $maxPerEducation)|| ($casesRegion >= $maxPerRegion)) {
  // redirect('https://survey.maximiles.com/quotasfull?p=128822_5898d2e3&m=%SPM_PANELIST_ID%');
}
by SoSci Survey (327k points)
> "Vielen Dank für Ihre Teilnahme! Leider gehören Sie bei dieser Umfrage nicht zur gesuchten Zielgruppe."

Das ist dann wohl der Screenout-Redirect. Andererseits haben Sie in dem Code oben das erste redirect() gar nicht auskommentiert? Kommentieren Sie das erste redirect() aus und schreiben Sie darunter

html('<p>Redirect Screenout</p>');
pageStop();

und beim zweiten auskommentierten Redirect:

html('<p>Redirect Quotafull</p>');
pageStop();

Berichten Sie anschließend bitte, was davon angezeigt wird.
by s273725 (110 points)
Danke für den Hinweis!
Ich habe es durchgeführt und es erscheint auf der Folgeseite "Redirect Screenout".
Hier die Debug-Informationen:
[Information]    Interview Nummer 429 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt milkalternatives wird verwendet
[Information]    Die Verweildauer auf Seite 3 war 11 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3
[Information]    Antwort auf SD01 = 2
[Information]    Keine Antwort für SD01_04
[Information]    Antwort auf SD02_01 = 19
[Information]    Antwort auf SD03 = 1
[Information]    Keine Antwort für SD03_06
[Information]    Antwort auf SD04 = 4
[Information]    Keine Antwort für SD04_10
[Information]    Antwort auf SD05 = 3
[Information]    Antwort auf SD06 = 1
[Information]    Antwort auf SD07 = 3
[Information]    Keine Antwort für SD07_04
[Information]    Bedingung in Filter SD07/1 ist nicht erfüllt.
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 4 in Fragebogen base
[Information]    value("SD01") = 2
[Information]    value("SD05") = 3
[Information]    value("SD02_01") = 19
[Information]    value("SD03") = 1
[Inhalt]    Die Verarbeitung der Seite wurde durch pageStop() beendet

Ich habe nachfolgend nochmal alle Fehleranzeige-Instruktionen rausgenommen und jetzt läuft der Fragebogen ohne Screenout. Jetzt frage ich mich, ob die Programmierung der Quoten überhaupt geklappt hat, wenn jetzt alles einwandfrei läuft?

Debug-Informationen:
[Information]    Interview Nummer 430 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt milkalternatives wird verwendet
[Information]    Die Verweildauer auf Seite 3 war 15 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3
[Information]    Antwort auf SD01 = 1
[Information]    Keine Antwort für SD01_04
[Information]    Antwort auf SD02_01 = 24
[Information]    Antwort auf SD03 = 4
[Information]    Keine Antwort für SD03_06
[Information]    Antwort auf SD04 = 9
[Information]    Keine Antwort für SD04_10
[Information]    Antwort auf SD05 = 8
[Information]    Antwort auf SD06 = 2
[Information]    Antwort auf SD07 = 1
[Information]    Keine Antwort für SD07_04
[Information]    ▼ Filter SD07/1 wird aktiv (Bedingung erfüllt).
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 4 in Fragebogen base
[Information]    value("SD01") = 1
[Information]    value("SD05") = 8
[Information]    value("SD02_01") = 24
[Information]    value("SD03") = 4
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 5
[Information]    Entsprechend Filter SD07/F1 wird Seite 5 (SD P) angezeigt.
[Verarbeitung]    Erstelle Seite 5 in Fragebogen base
[Inhalt]    Erstelle Frage SD08

Hier der entsprechende HPH-Code
$quotaAge = [
  1 => 380,  // 380 Personen in Altersgruppe 1 (18-22 Jahre)
  2 => 380,  // 380 Personen in Altersgruppe 2 (23-26 Jahre)
];
$quotaGender = [
  1 => 380,  // 380 Frauen (Code 1)
  2 => 380   // 380 Männer (Code 2)
];
$quotaEducation = [
  1 => 494,  // 494 Personen in Bildungsgruppe 1 (Kein, Haupt- und Mittlerer Schulabschluss)
  2 => 380   // 380 Personen in Bildungsgruppe 2 (Fachhochschul- oder Hochschulreife)
];
$quotaRegion = [
  1 => 167,  // 167 aus NRW (Code 10)
  2 => 121,   // 121 aus BAY (Code 2)
  3 => 106,   // 106 aus BAWÜ (Code 1)
  4 => 76,   // 76 aus NDS (Code 9)
  5 => 61,   // 61 aus HS Männer (Code 7)
  6 => 38,   // 38 aus RLP (Code 11)
  7 => 34,   // 34 aus SACH (Code 14)
  8 => 34,   // 34 aus BER (Code 3)
  9 => 27,   // 27 aus SH (Code 15)
  10 => 15,   // 15 aus BB (Code 4)
  11 => 15,   // 15 aus SA (Code 13)
  12 => 15,   // 15 aus TH (Code 2)
  13 => 19,   // 19 aus HH (Code 6)
  14 => 15,   // 15 aus MV (Code 8)
  15 => 8,   // 8 aus SL (Code 12)
  16 => 8,   // 8 aus BRE (Code 5)
];

// Gender wird direkt ausgelesen
$gender = value('SD01');
// Region wird direkt ausgelesen
$region = value('SD05');
// Das Alter wird umkodiert
$age = value('SD02_01');
if ($age <= 22) {
  $ageGroup = 1;
} else {
  $ageGroup = 2;
}
// Die Education wird umkodiert
$education = value('SD03');
if ($education <= 4) {
  $educationGroup = 1;
} elseif ($education = 5) {
  $educationGroup = 2;
} else {
  $educationGroup = 3;
}

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesAge    = statistic('count', 'SD10_01', $ageGroup);
$casesGender = statistic('count', 'SD09_01', $gender);
$casesEducation = statistic('count', 'SD11_01', $educationGroup);
$casesRegion = statistic('count', 'SD12_01', $region);

// Screenout
if (!array_key_exists($ageGroup, $quotaAge) || !array_key_exists($gender, $quotaGender) || !array_key_exists($educationGroup, $quotaEducation) || !array_key_exists($region, $quotaRegion)) {
  redirect('https://survey.maximiles.com/screenout?p=128822_07358555&m=%SPM_PANELIST_ID%');
}

// Auslesen der Quoten für die angegeben Merkmale
$maxPerAge    = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
$maxPerEducation    = $quotaEducation[$educationGroup];
$maxPerRegion = $quotaRegion[$region];

// Quotenstopp
if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender) || ($casesEducation >= $maxPerEducation)|| ($casesRegion >= $maxPerRegion)) {
  // redirect('https://survey.maximiles.com/quotasfull?p=128822_5898d2e3&m=%SPM_PANELIST_ID%');
}
by SoSci Survey (327k points)
Das redirect() zum Quotenstopp ist in Ihrem Code noch auskommentiert.

Aber wenn Sie im ersten Versuch ein "Redirect Screenout" angezeigt bekommen haben, dann ist da noch was im Argen. Testen Sie mit genau den Angaben, die Sie dort gemacht hatten (s. Debug-Information oben).

Lassen Sie sich oberhalb des Screenout-Filters anzeigen, ob das mit dem Umkodieren korrekt funktioniert hat:

debug(gender);
debug($region);
debug($ageGroup);
debug($educationGroup);
// Screenout
...
by s273725 (110 points)
Nach der Ausgabe müsste das Umkodieren funktioniert haben.
Debug-Informationen:
[Information]    Interview Nummer 449 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt milkalternatives wird verwendet
[Information]    Die Verweildauer auf Seite 3 war 10 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3
[Information]    Antwort auf SD01 = 2
[Information]    Keine Antwort für SD01_04
[Information]    Antwort auf SD02_01 = 18
[Information]    Antwort auf SD03 = 5
[Information]    Keine Antwort für SD03_06
[Information]    Antwort auf SD04 = 5
[Information]    Keine Antwort für SD04_10
[Information]    Antwort auf SD05 = 4
[Information]    Antwort auf SD06 = 2
[Information]    Antwort auf SD07 = 2
[Information]    Keine Antwort für SD07_04
[Information]    Bedingung in Filter SD07/1 ist nicht erfüllt.
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 4 in Fragebogen base
[Information]    value("SD01") = 2
[Information]    value("SD05") = 4
[Information]    value("SD02_01") = 18
[Information]    value("SD03") = 5
debug()    Inhalt: $gender = 2 (string)
debug()    Inhalt: $region = 4 (string)
debug()    Inhalt: $ageGroup = 1 (integer)
debug()    Inhalt: $educationGroup = 2 (integer)
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 5
[Information]    Entsprechend Filter SD07/F1 wird Seite 5 (SD P) nicht angezeigt.
[Verarbeitung]    Erstelle Seite 6 in Fragebogen base
[Inhalt]    Erstelle Frage TI02
[Inhalt]    Erstelle Frage TX04
[Inhalt]    Erstelle Frage DH01
[Inhalt]    Erstelle Frage DH02
[Inhalt]    Erstelle Frage DH03
by SoSci Survey (327k points)
Eine Notiz, dass ein redirect() erfolgt, wurde nicht angezeigt, obwohl Sie entsprechende html()-Befehle eingefügt hatten? Haben Sie es mit denselben Antworten ausprobiert, wie früher noch Probleme gemacht hatten?
by s273725 (110 points)
Bei der vorherigen Ausgabe habe ich vergessen den Screenout und Pagestopp auszukommentieren. Wenn ich die html()-Befehle wieder einfüge, erhalte ich wieder den Redirect Screenout mit den folgenden Debug-Informationen:

[Information]    Interview Nummer 451 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt milkalternatives wird verwendet
[Information]    Die Verweildauer auf Seite 3 war 12 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3
[Information]    Antwort auf SD01 = 1
[Information]    Keine Antwort für SD01_04
[Information]    Antwort auf SD02_01 = 23
[Information]    Antwort auf SD03 = 3
[Information]    Keine Antwort für SD03_06
[Information]    Antwort auf SD04 = 5
[Information]    Keine Antwort für SD04_10
[Information]    Antwort auf SD05 = 2
[Information]    Antwort auf SD06 = 3
[Information]    Antwort auf SD07 = 2
[Information]    Keine Antwort für SD07_04
[Information]    Bedingung in Filter SD07/1 ist nicht erfüllt.
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 4 in Fragebogen base
[Information]    value("SD01") = 1
[Information]    value("SD05") = 2
[Information]    value("SD02_01") = 23
[Information]    value("SD03") = 3
debug()    Inhalt: $gender = 1 (string)
debug()    Inhalt: $region = 2 (string)
debug()    Inhalt: $ageGroup = 2 (integer)
debug()    Inhalt: $educationGroup = 1 (integer)
[Inhalt]    Die Verarbeitung der Seite wurde durch pageStop() beendet

PHP-Code
$quotaAge = [
  1 => 380,  // 380 Personen in Altersgruppe 1 (18-22 Jahre)
  2 => 380,  // 380 Personen in Altersgruppe 2 (23-26 Jahre)
];
$quotaGender = [
  1 => 380,  // 380 Frauen (Code 1)
  2 => 380   // 380 Männer (Code 2)
];
$quotaEducation = [
  1 => 494,  // 494 Personen in Bildungsgruppe 1 (Kein, Haupt- und Mittlerer Schulabschluss)
  2 => 380   // 380 Personen in Bildungsgruppe 2 (Fachhochschul- oder Hochschulreife)
];
$quotaRegion = [
  1 => 167,  // 167 aus NRW (Code 10)
  2 => 121,   // 121 aus BAY (Code 2)
  3 => 106,   // 106 aus BAWÜ (Code 1)
  4 => 76,   // 76 aus NDS (Code 9)
  5 => 61,   // 61 aus HS Männer (Code 7)
  6 => 38,   // 38 aus RLP (Code 11)
  7 => 34,   // 34 aus SACH (Code 14)
  8 => 34,   // 34 aus BER (Code 3)
  9 => 27,   // 27 aus SH (Code 15)
  10 => 15,   // 15 aus BB (Code 4)
  11 => 15,   // 15 aus SA (Code 13)
  12 => 15,   // 15 aus TH (Code 2)
  13 => 19,   // 19 aus HH (Code 6)
  14 => 15,   // 15 aus MV (Code 8)
  15 => 8,   // 8 aus SL (Code 12)
  16 => 8,   // 8 aus BRE (Code 5)
];

// Gender wird direkt ausgelesen
$gender = value('SD01');
// Region wird direkt ausgelesen
$region = value('SD05');
// Das Alter wird umkodiert
$age = value('SD02_01');
if ($age <= 22) {
  $ageGroup = 1;
} else {
  $ageGroup = 2;
}
// Die Education wird umkodiert
$education = value('SD03');
if ($education <= 4) {
  $educationGroup = 1;
} elseif ($education = 5) {
  $educationGroup = 2;
} else {
  $educationGroup = 3;
}

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesAge    = statistic('count', 'SD10_01', $ageGroup);
$casesGender = statistic('count', 'SD09_01', $gender);
$casesEducation = statistic('count', 'SD11_01', $educationGroup);
$casesRegion = statistic('count', 'SD12_01', $region);

debug($gender);
debug($region);
debug($ageGroup);
debug($educationGroup);
// Screenout
if (!array_key_exists($ageGroup, $quotaAge) || !array_key_exists($gender, $quotaGender) || !array_key_exists($educationGroup, $quotaEducation) || !array_key_exists($region, $quotaRegion)) {
  redirect('https://survey.maximiles.com/screenout?p=128822_07358555&m=%SPM_PANELIST_ID%');
}
html('<p>Redirect Screenout</p>');
pageStop();

// Auslesen der Quoten für die angegeben Merkmale
$maxPerAge    = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
$maxPerEducation    = $quotaEducation[$educationGroup];
$maxPerRegion = $quotaRegion[$region];

// Quotenstopp
if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender) || ($casesEducation >= $maxPerEducation)|| ($casesRegion >= $maxPerRegion)) {
  // redirect('https://survey.maximiles.com/quotasfull?p=128822_5898d2e3&m=%SPM_PANELIST_ID%');
}
html('<p>Redirect ausgelöst</p>');
  pageStop();
by SoSci Survey (327k points)
Jetzt haben Sie den redirect()-Befehl vom Screenout aber nicht auskommentiert und den html()-Befehl unterhalb der geschweiften Klammer. Dieser Befehl wird also immer ausgeführt. Korrekt müsste es zum Testen so aussehen:

f (!array_key_exists(...)) {
  // redirect('https://survey.maximiles.com/screenout?...');
  html('<p>Redirect Screenout</p>');
  pageStop();
}

Gilt natürlich auch für das zweite redirect().

Für mich sieht allerdings alles korrekt aus. Es wäre nur gut, wenn wir nachvollziehen könnten, was ursprünglich schief gelaufen ist.
by s273725 (110 points)
Danke für den Hinweis! Ich habe es jetzt korrekt auskommentiert und es scheint zu laufen. Ich frage mich natürlich auch, woran es davor gelegen haben könnte und habe jetzt etwas Angst den Link zum Panel Provider weiterzuleiten. Aber scheinbar läuft es ja einwandfrei.

Debug-Informationen:
[Information]    Interview Nummer 453 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt milkalternatives wird verwendet
[Information]    Die Verweildauer auf Seite 3 war 15 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3
[Information]    Antwort auf SD01 = 2
[Information]    Keine Antwort für SD01_04
[Information]    Antwort auf SD02_01 = 23
[Information]    Antwort auf SD03 = 3
[Information]    Keine Antwort für SD03_06
[Information]    Antwort auf SD04 = 2
[Information]    Keine Antwort für SD04_10
[Information]    Antwort auf SD05 = 2
[Information]    Antwort auf SD06 = 3
[Information]    Antwort auf SD07 = 2
[Information]    Keine Antwort für SD07_04
[Information]    Bedingung in Filter SD07/1 ist nicht erfüllt.
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 4 in Fragebogen base
[Information]    value("SD01") = 2
[Information]    value("SD05") = 2
[Information]    value("SD02_01") = 23
[Information]    value("SD03") = 3
debug()    Inhalt: $gender = 2 (string)
debug()    Inhalt: $region = 2 (string)
debug()    Inhalt: $ageGroup = 2 (integer)
debug()    Inhalt: $educationGroup = 1 (integer)
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 5
[Information]    Entsprechend Filter SD07/F1 wird Seite 5 (SD P) nicht angezeigt.
[Verarbeitung]    Erstelle Seite 6 in Fragebogen base
[Inhalt]    Erstelle Frage TI02
[Inhalt]    Erstelle Frage TX04
[Inhalt]    Erstelle Frage DH01
[Inhalt]    Erstelle Frage DH02
[Inhalt]    Erstelle Frage DH03
by SoSci Survey (327k points)
Der Panel-Provider soll erstmal einen Soft-Start machen - und sollten dann einzelne demografische Gruppen fehlen, würden sie nochmal spezifisch testen.
by s273725 (110 points)
Alles klar! ich danke Ihnen sehr für Ihre Unterstützung und schnelle Hilfe :-)!

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

...