0 votes
in SoSci Survey (dt.) by s084281 (190 points)

Liebes Support-Team,

wir haben leider erneute Probleme mit einer Redirect-Syntax (QuotaFull). Wir arbeiten mit Respondi zusammen und haben für die Merkmale Alter, Geschlecht, Bildung und Wohnort Obergrenzen festgelegt. Nun werden alle Personen abgelehnt und redirected, nur weil eine Quote (eine Bildungskategorie) voll ist. Die Personen werden auch abgelehnt, wenn sie zu einer andere Bildungskategorie gehören. Ich kann mir vorstellen, dass es an dem if-Befehl beim Redirect-Befehl liegt, finde aber leider den Fehler nicht.

Wir wären sehr dankbar für eine Lösung, vor allem, da die Befragung schon online ist und sehr viele potentielle Teilnehmende einfach abgewiesen werden.

Vielen Dank im Voraus!

// 1. Definition der Quoten

$quotaAge = [
1 => 300, // 300 Personen in Altersgruppe 1 (16-29 Jahre)
2 => 240, // 240 Personen in Altersgruppe 2 (30-39 Jahre)
3 => 240, // 240 Personen in Altersgruppe 3 (40-49 Jahre)
4 => 315, // 315 Personen in Altersgruppe 4 (50-59 Jahre)
5 => 390, // 390 Personen in Altersgruppe 5 (60-74 Jahre)
6 => 300, // 300 Personen in Altersgruppe 6 (ab 75 Jahre), nur damit sie nicht rausfallen
];
$quotaGender = [
1 => 750, // 750 Frauen (Code 1)
2 => 750, // 750 Männer (Code 2)
3 => 200, // 200 in divers (Code 3), nur damit sie nicht rausfallen
];
$quotaEducation = [
1 => 495, // 495 Personen in Bildungsgruppe 1 (gering)
2 => 480, // 480 Personen in Bildungsgruppe 2 (mittel)
3 => 525, // 525 Personen in Bildungsgruppe 3 (hoch)
];
$quotaResidence = [
1 => 225, // 225 Unter 5.000 (Code 1)
2 => 375, // 375 Über 5.000 bis 20.000 (Code 2)
3 => 450, // 450 Über 20.000 bis 100.000 (Code 3)
4 => 450, // 450 Über 100.000 (Code 4)
]; 

// 2. Merkmale auslesen und umkodieren 

//Das Alter wird umkodiert
$age = value('SD01_01');
if($age < 30){
$ageGroup = 1;
}elseif($age < 40){
$ageGroup = 2;
}elseif($age < 50){
$ageGroup = 3;
}elseif($age < 60){
$ageGroup = 4;
}elseif($age < 75){
$ageGroup = 5;
}elseif($age >= 75){
$ageGroup = 6;
}

//Geschlecht wird direkt ausgelesen
$gender = value('SD02');

//Bildung wird umkodiert
$education = value('SD06');
if($education <= 8){
$educationGroup = 1;
}elseif($education = 9){
$educationGroup = 2;
}elseif($education >= 10){
$educationGroup = 3;
}

//Residenz wird direkt ausgelesen
$residence = value('SD03');

// 3. Zählung der vorliegenden Fälle

//Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesAge = statistic('count', 'SD12_01', $ageGroup);
$casesGender = statistic('count', 'SD12_02', $gender);
$casesEducation = statistic('count', 'SD12_03', $educationGroup);
$casesResidence = statistic('count', 'SD12_04', $residence);


//Auslesen der Quoten für die angegebenen Merkmale
$maxPerAge = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
$maxPerEducation = $quotaEducation[$educationGroup];
$maxPerResidence = $quotaResidence[$residence];

//Quotenstopp
if(($casesAge >= $maxPerAge)||($casesGender >= $maxPerGender)||($casesEducation >= $maxPerEducation)||($casesResidence >= $maxPerResidence)){
redirect('https://survey.maximiles.com/quotasfull?p=84155&m=%reference%');
}

2 Answers

0 votes
by s084281 (190 points)

Ich hatte einen Teil der von SoSciSurvey vorgeschlagenen Syntax (Quotierung) entfernt, und dachte, es könnte daran liegen, und habe es jetzt wieder mit reingenommen. Leider werden immer noch alle Teilnehmenden abgewiesen.

//Screenout
if(! array_key_exists($ageGroup, $quotaAge)||
! array_key_exists($gender, $quotaGender)||
! array_key_exists($educationGroup, $quotaEducation)||
! array_key_exists($residence, $quotaResidence)){
redirect('https://survey.maximiles.com/screenout?p=84155&m=%reference%');
}
by SoSci Survey (304k points)
Um das Problem einzugrenzen, ändern Sie den Redirect wie folgt:

if(! array_key_exists($ageGroup, $quotaAge)||
! array_key_exists($gender, $quotaGender)||
! array_key_exists($educationGroup, $quotaEducation)||
! array_key_exists($residence, $quotaResidence)) {
  debug($ageGroup);
  debug($gender);
  debug($educationGroup);
  debug($residence);
  html('<p>Redirect 1</p>');
}

Anhand der angezeigten Zahlen können wir dann prüfen, welche Bedingung zum Screenout führt.
by SoSci Survey (304k points)
... und wenn es nicht dieser Redirect ist, dann das Gleiche nochmal beim anderen Redirect.

if(($casesAge >= $maxPerAge)||($casesGender >= $maxPerGender)||($casesEducation >= $maxPerEducation)||($casesResidence >= $maxPerResidence)){
  debug($maxPerAge);
  debug($maxPerGender);
  debug($maxPerEducation);
  debug($maxPerResidence);
  html('<p>Redirect 2</p>');
}
0 votes
by s084281 (190 points)
edited by s084281

Ich habe nun wie Sie vorgeschlagen haben den 2. Redirect Befehl geändert, (inkl. der debugs),:

if(($casesAge >= $maxPerAge)||($casesGender >= $maxPerGender)||($casesEducation >= $maxPerEducation)||($casesResidence >= $maxPerResidence)){
  debug($maxPerAge);
  debug($maxPerGender);
  debug($maxPerEducation);
  debug($maxPerResidence);
  html('https://survey.maximiles.com/quotasfull?p=84155&m=');
} 

und erhalte im Debug Modus dann folgenden Output:

by s084281 (190 points)
Nun konnten weitere Personen teilnehmen, allerdings auch Personen, die zu der Bildungskategorie gehören, die schon voll war, und die deswegen eigentlich geredirected hätten werden müssen. Also bevor ich die Debugs eingefügt haben wurden ALLE geredirected, und nun niemand mehr. :/
by SoSci Survey (304k points)
> Also bevor ich die Debugs eingefügt haben wurden ALLE geredirected, und nun niemand mehr. :/

Ich ging davon aus, dass der Fragebogen noch in der Entwicklung und noch nicht live sei. Wenn Sie das redirect() entfernen und durch ein html() ergänzen, wird natürlich niemand mehr aus der Erhebung geworfen.

Die Zahlen sehen alle korrekt aus. Für die weiteren Testes müssten Sie wohl auch noch die gezählten Fälle anzeigen:

debug($casesAge);
debug($casesGender);
debug($casesEducation);
debug($casesResidence);

Offenbar werden da - soweit die Vergleichswerte stimmen - mehr Fälle gezählt als Sie gezählt haben möchten.

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

...