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

Liebes Support-Team,

wir arbeiten mit einem Panelanbieter zusammen, und stratifizieren für die Merkmale Alter, Geschlecht, Bildung und Stadt/Land (hier Residenz genannt).
Für jedes Merkmal haben wir ein Limit definiert, ab dem potentielle Teilnehmende abgewiesen werden sollen, da die Quote erfüllt ist.
Teste ich nun den Fragebogen, werde ich nach der Seite, auf der die Soziodemographie-Fragen sind, redirected, da scheinbar die Quoten erfüllt sind. Da noch niemand an der Befragung teilgenommen hat, kann dies nicht sein.

Jetzt frage ich mich, wo in meiner Syntax der Fehler liegt. Liegt es in irgendeiner Weise an den internen Variablen?

Anbei finden Sie meine Syntax (ich schaffe es leider nicht, sie als Syntax einzufügen...)

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) ];
$quotaGender = [ 1 => 750, // 750 Frauen (Code 1) 2 => 750, // 750 Männer (Code 2) ];
$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');
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%');
}

 auf vorletzter Seite:

//4. Kopieren der Quotenmerkmale

//Das Alter wird umkodiert
$age = value('SD01');
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');

put('SD12_01', $ageGroup);
put('SD12_02', $gender);
put('SD12_03', $educationGroup);
put('SD12_04', $residence);

redirect('https://survey.maximiles.com/complete?p=84155_e968bd93&m=%reference%');

1 Answer

+1 vote
by SoSci Survey (308k points)

Bitte verwenden Sie den Knopf {}, um Code als solchen zu formatieren.

Mein Tipp wäre, dass es daran liegt, dass Sie das redirect() am Ende immer aufrufen - also unabhängig davon, ob die Quoten erfüllt sind oder nicht. Da fehlt das ein oder andere IF außenherum: Quotierung

by s084281 (190 points)
Vielen Dank!

Ich habe mich an der von Ihnen vorgeschlagenen Quotierungs-Seite orientiert, dort wird folgendes vorgeschlagen:

// Quotenstopp
if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender)) {
  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');

Dementsprechend habe ich auch vor alle Bedingungen EIN "if" gesetzt. Fehlen an dieser Stelle weitere "if"s?

Bei mir sieht es ja aktuell so aus:

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

Vielen Dank für Ihre Hilfe!
by s084281 (190 points)
Ich habe das Problem nun gefunden, es lag nicht an dem if Befehl, sondern dass bei maxPerGender und maxPerResidence die $-Zeichen gefehlt haben.
by SoSci Survey (308k points)
In Ihrer ursprünglichen Frage oben war gar kein IF sichtbar ... daher war das meine erste Vermutung. Wenn Sie das Problem nun aber identifiziert haben, umso besser.

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

...