0 votes
in SoSci Survey (dt.) by s088332 (245 points)
edited by s088332

Hallo liebes Support-Team,

für unsere Berfragung wollen wir verbundenen Quoten (Alter, Geschlecht) einbauen.

Wenn diese voll sind bzw. nicht den Kriterien entsprechen, sollen diese an den Panelanbieter zurückgeleitet werden.

Das Screening ist direkt zu Beginn der Befragung, Seite 1 Begrüßung, Seite 2 Geschlecht, Seite 3 das Alter (offen), auf Seite 4 kommt dann der php-Code und sollte eigentlich das Screening stattfinden.

Meine Variablen:

Die Zahl habe ich bei SC02_01 auf 1-100 festgelegt, falls das von Relevanz sein sollte.

Mein Problem ist jetzt, dass der Screenout einfach nicht funktioniert.

Also Personen werden z.B. im Alter von 17 Jahren trotzdem weiter gelassen.

Debug-Modus, weiblich = 1 und Alter = 17:

Interessanterweise ist mir aber eben aufgefallen, dass er es richtig erkannt hat bei weiblich =1 und einem Alter von 61, dann kommt das hier (Natürlich ein Testlink).

Bei männlich=2 und einem Alter von 61 funktioiert es z.B. aber wieder nicht...

Mein Code sieht wie folgt aus:

$age = value('SC02_01');
 
// 
if ($age < 18) {
  $ageGrp = 1;
} elseif ($age <= 29) {
  $ageGrp = 2;
} elseif ($age <= 39) {
  $ageGrp = 3;
} elseif ($age <= 49) {
  $ageGrp = 4;
} elseif ($age <= 60) {
  $ageGrp = 5;
} else                {
  $ageGrp = 6;
}
 
// 
put('ID02_01', $ageGrp);

// 
$ageGrp = value('ID02_01');
$gender = value('SC01');
 
// 
if (($ageGrp < 1) or ($ageGrp > 6)) {
  redirect('http://www.anbieter.com/p1234567/screenout.php?id=%panelID%');
}
 
// 
$demID = $ageGrp.'-'.$gender;
 
// 
$limits = array(
  '1-1' => 0,
  '1-2' => 0,
  '2-1' => 59,
  '2-2' => 63,
  '3-1' => 52,
  '3-2' => 54,
  '4-1' => 60,
  '4-2' => 61,
  '5-1' => 75,
  '5-2' => 75,
  '6-1' => 0,
  '6-2' => 0
);
 
// 
$n = statistic('crosscount', array('ID02_01', 'SC01'), array($ageGrp, $gender));
 
// 
if ($n > $limits[$demID]) {
  redirect('http://www.anbieter.com/p1234567/quotafull.php?id=%panelID%');
}

Die richtigen Redirect-Links vom Anbieter habe ich noch nicht, liegt es daran? Wobei es bei meinen anderen Filtern auch klappt.

Auch im Debug-Modus klappt es nicht.

Es würde mich sehr freuen, wenn Sie da einmal drüber schauen könnten.

Vielen Dank und viele Grüße
Melanie Bender


Ergänzung// 07.01.2018

Der Screenout funktioniert jetzt.
Die Reihenfolge für des Fb's sieht jetzt wie folgt aus; Variablennamen haben sich nicht verändert:

Seite 1 - Begrüßung
Seite 2 - Alter
Seite 3 - Geschlecht (php-Cope Screenout <2 und >5 Altersgruppen) - klappt
Seite 4 - php Code verbundene Quoten, wie folgt:

$ageGrp = value('ID02_01');
$gender = value('SC01');
 
// 
$demID = $ageGrp.'-'.$gender;
 
// 
$limits = array(
  '1-1' => 0,
  '1-2' => 0,
  '2-1' => 0,
  '2-2' => 0,
  '3-1' => 52,
  '3-2' => 54,
  '4-1' => 60,
  '4-2' => 61,
  '5-1' => 75,
  '5-2' => 75,
  '6-1' => 0,
  '6-2' => 0
);
 
// 
$n = statistic('crosscount', array('ID02_01', 'SC01'), array($ageGrp, $gender));
 
// 
if ($n > $limits[$demID]) {
  redirect('http://www.anbieter.com/p1234567/quotafull.php?id=%panelID%');
}

Die Quoten wollte ich gerne testen, und habe dann z.B. Alterskategorie 2, weiblich ('2-1') auf 0 gesetzt im Code - folglich sollte doch direkt der Quotafull-Link kommen, oder?

Nur irgendwie lässt er mich trotzdem weiter.... zählt der Code erst abgeschlossene Fragebögen?
Das Problem tritt übrigens bei allen Altersgruppen auf.
Die Daten hatte ich in meinem Datensatz komplett gelöscht, sodass ich quasi bei "0" gestartet bin.

Hier die Debug-Information; Alter 23 und w:

by SoSci Survey (327k points)
Könnten Sie Ihre Frage bitte editieren und 2 kleine Details ergänzen: (1) Den Ausschnitt zu SC02 in der Variablen-Übersicht und (2) die Debug-Information, wenn es nicht klappt (z.B. Alter < 17). Danke.
by s088332 (245 points)
Habe es soeben oben ergänzt, vielen Dank!

2 Answers

0 votes
by SoSci Survey (327k points)

Ich beziehe mich einmal konkret auf das Problem, dass Teilnehmer <18 Jahre nicht ausgefiltert werden. Sie speichern für die Altersgruppe <18 den Code 1 in $ageGrp bzw. ID02_01.

Ihr Screenout-Filter lautet dann wie folgt:

if (($ageGrp < 1) or ($ageGrp > 6)) {
  redirect('http://www.anbieter.com/p1234567/screenout.php?id=%panelID%');
}

Hier wird geprüft, ib die $ageGrp kleiner (!) als 1 ist. Aber sie ist ja 1. Daher wäre für einen korrekten Screenout folgender Code erforderlich:

if (($ageGrp < 2) or ($ageGrp > 5)) {
  redirect('http://www.anbieter.com/p1234567/screenout.php?id=%panelID%');
}

Wenn das klappt, schreiben Sie bitte einen kurzen Kommentar, was wir uns als nächstes ansehen sollen. Danke.

by s088332 (245 points)
Vielen lieben Dank für die schnelle Antwort, das hat jetzt geklappt!

Oben habe ich meine Frage ergänzt (s. Abschnitt 07.01.) - das mit dem Quotafull für die verbundenen Quoten mag noch nicht klappen.

Danke!
0 votes
by SoSci Survey (327k points)

Nur irgendwie lässt er mich trotzdem weiter.... zählt der Code erst abgeschlossene Fragebögen?

Ja, korrekt - so steht es auch in der Dokumentation. Achten Sie in diesem Kontext auch auf die Debug-Info zur Funktion statistic() die lautet "Anzahl Antworten ...: 0".

Sie können allerdings in der Funktion statistic() zum Testen als vierten Parameter angeben, dass auch unvollständige Fälle gezählt werden sollen. Oder Sie springen im Debug-Modus einfach mal zur letzten Seite, um einen Fall abzuschließen (Springen können Sie oben links bei der Seitennummer).

by s088332 (245 points)
Alles klar, vielen Dank für Ihre schnelle Antwort - und das am Wochenende.

Ich habe es mit dem Debug-Modus getestet, wie oben beschrieben, und der redirect () quotafull funktioniert, danke.

Aber eine Sache irritiert mich:

Wenn ich im php-Code schreibe, dass meine Obergrenze für z.B. '2-1' => 2 wäre, dann kann mich trotzdem drei (!) Mal vollständig durchklicken. Beim vierten Mal fliege ich dann erst raus. Heißt das im Umkehrschluss, dass ich meine Quoten um jeweils eins verringern müsste?
Sprich: '2-1' => 1 , wenn ich zwei vollständige Fälle haben möchte?

Und:

Wie würde der Parameter für die statistic() Funktion genau aussehen, um auch noch nicht beendete Fälle zu zählen? Meine Sorge wäre, dass gerade gegen Ende die Quoten überlaufen, weil zu viele Personen gleichzeitig aus einer Kategorie den Fragebogen bearbeiten und nicht vorzeitig ausgescreent werden.
by SoSci Survey (327k points)
Nun Sie schreiben im Quoten-Filter:

if ($n > $limits[$demID])

Würden Sie statt dem > das größer-gleich verwenden (>=), dann greift der Filter einen Teilnehmer früher. Welchen Filter Sie hier exakt verwenden, hängt auch davon ab, ob Sie unvollständige Fälle zählen und ob Sie dann die Original-Variablen zählen oder eine umkodierte Variable (wie in Ihrem Fall).
by SoSci Survey (327k points)
Für das Zählen unvollständiger Fälle setzen Sie einfach als vierten Parameter ein "true" (ohne Anführungzeichen), wie aus der Anleitung zu statistic() (hoffentlich) ersichtlich.
by s088332 (245 points)
Perfekt - es hat beides funktioniert!
Leider bin ich nicht ganz so fit im php-Code, deswegen habe ich da öfters Rückfragen zu.

Vielen Dank für den tollen Support!

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

...