Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
de:survey:quota [19.07.2017 20:16] – [Quotierung] autschde:survey:quota [01.12.2019 12:04] admin
Zeile 5: Zeile 5:
 **Hinweis:** Für andere Formen der Rekrutierung ist ein Quotenstopp i.d.R. __nicht__ sinnvoll. Die Folge wäre, dass man die Mehrheit der interessierten Teilnehmer abweist -- zugleich aber noch rekrutieren muss, damit man die fehlenden demografischen Gruppen vervollständigt. **Hinweis:** Für andere Formen der Rekrutierung ist ein Quotenstopp i.d.R. __nicht__ sinnvoll. Die Folge wäre, dass man die Mehrheit der interessierten Teilnehmer abweist -- zugleich aber noch rekrutieren muss, damit man die fehlenden demografischen Gruppen vervollständigt.
  
-**Hinweis:** Vorsicht beim Zusammenspiel von ''[[:de:create:functions:statistic]]'' und ''[[:de:create:functions:redirect]]''. Der Befehl ''redirect()'' markiert die Fragebögen von Abbrechern und aufgrund der Quote abgewiesenen Teilnehmern als "abgeschlossen", sodass sie von ''statistic()'' gezählt werden. Um hier falsche Zählungen zu vermeiden, ist es sinnvoll, die zu zählende Variable gegen Ende des Fragebogens mittels ''[[:de:create:functions:put]]'' in eine [[:de:create:questions:internal]] zu kopieren und mittels ''statistic()'' dann die interne Variable abzuzählen. Alternativ kann man in einer internen Variable für vollständige Fälle einen bestimmten Wert ablegen und dann mit ''statistic('filter', ...)'' oder ''statistic('crosscount', ...)'' arbeiten.+**Tipp:** Verwenden Sie den Debug-Modus und sehen Sie die Debug-Informationen an, um die Funktion des Quotenstopps zu prüfen und wenn dieser im Test (z.b. mit sehr kleinen Quotennicht sofort funktioniert ([[:de:create:filter-solving]]).
  
-**Tipp:** Verwenden Sie den Debug-Modus und sehen Sie die Debug-Informationen anwenn die Quotenstopp im Test nicht sofort funktioniert ([[:de:create:filter-solving]]).+ 
 +===== Funktionsweise===== 
 + 
 +Die Quotierung erfolgt in folgenden Schritten: 
 + 
 +  Abfrage der Quoten-Merkmale einer Person mittels ''[[:de:create:functions:value]]''
 +  - Zählungwie viele Personen mit dieser Merkmalsausprägung bzw. mit dieser Kombination von Merkmalsausprägungen bereits befragt wurden, mittels ''[[:de:create:functions:statistic]]''
 +  Vergleich der Zählung mit einer Quotentabelle, wie viele Personen pro demografischer Zelle benötigt werden. 
 +  - Abweisen von Personen, wenn für eine demografische Zelle bereits ausreichend Fälle vorliegen, mittels ''[[:de:create:functions:redirect]]''.
  
 Mit "demografische Zelle" oder "demografische Gruppe" ist jeweils eine Kombination der zu quotierenden Merkmale gemeint (z.B. "männliche Teilnehmer zwischen 15 und 25 Jahre", wenn Alter und Geschlecht quotiert werden). Mit "demografische Zelle" oder "demografische Gruppe" ist jeweils eine Kombination der zu quotierenden Merkmale gemeint (z.B. "männliche Teilnehmer zwischen 15 und 25 Jahre", wenn Alter und Geschlecht quotiert werden).
  
-Prinzipiell kann man unverbundene und verbundenen Quoten prüfen. Bei der unverbundenen Quotierung werden die Merkmale einzeln nacheinander geprüft ("Liegen schon genug Fragebögen von männlichen Teilnehmern vor?" "Liegen schon genug Fragebögen von jungen Teilnehmern vor?"). Entsprechend wäre es bei der unbverbundenen Quotierung möglich, die Quoten mit jungen Frauen und alten Männer zu füllen -- ganz ohne junge Männer. Bei der verbundenen Quotierung werden die demografischen Zellen überprüft ("Liegen schon genug Fragebögen von jungen männlichen Teilnehmen vor?"). Die verbundene Quotierung ist damit weniger anfällig für systematische Verzerrungen (Konfundierung zwischen den demografischen Merkmalen) -- allerdings werden auch mehr potenzielle Teilnehmer abgewiesen.+Prinzipiell kann man unverbundene und verbundenen Quoten prüfen. Bei der unverbundenen Quotierung werden die Merkmale einzeln nacheinander geprüft ("Liegen schon genug Fragebögen von männlichen Teilnehmern vor?" "Liegen schon genug Fragebögen von jungen Teilnehmern vor?"). Hier werden die Randsummen der Verteilung überprüft. Entsprechend wäre es bei der unverbundenen Quotierung möglich, die Quoten mit jungen Frauen und alten Männer zu füllen -- ganz ohne junge Männer.
  
 +Bei der verbundenen Quotierung werden die demografischen Zellen überprüft ("Liegen schon genug Fragebögen von jungen männlichen Teilnehmen vor?"). Die verbundene Quotierung ist damit weniger anfällig für systematische Verzerrungen (Konfundierung zwischen den demografischen Merkmalen) -- allerdings werden auch mehr potenzielle Teilnehmer abgewiesen.
  
-===== Technische Umsetzung =====+Beim Zusammenspiel von ''statistic()'' und ''redirect()'' zu beachten: Der Befehl ''redirect()'' markiert die Fragebögen von abgewiesenen Teilnehmern als "abgeschlossen" (FINISHED=1), sodass sie von ''statistic()'' gezählt werden. Um falsche Zählungen zu vermeiden, werden nicht direkt die Variablen gezählt, welche im Fragebogen abgefragt wurden: Stattdessen werden beim Complete-Redirect die Quotenmerkmale mittels ''[[:de:create:functions:put]]'' in [[:de:create:questions:internal|interne Variablen]] kopiert, die dann gezählt werden können. Für die Quotierung sind demnach 2 getrennte PHP-Codes erforderlich.
  
-Die technische Umsetzung erfolgt mittels [[:de:create:php]] und umfasst aus drei oder vier Teile:+  - Nach Abfrage der Quotenmerkmale (auf der darauf folgenden Seite) wird die vom Teilnehmer angegeben Ausprägung gegen die Anzahl vorhandener Fälle geprüft. 
 +  - Direkt vor dem Complete-Redirect wird die Ausprägung des Quoten-Merkmals in eine interne Variable kopiert.
  
-  - Eine Definition, welche Gruppen es gibt und wie viele Teilnehmer dort jeweils erlaubt sind. Hierfür kommt ein sog. [[de:create:array|Array]] zum Einsatz. +Sofern das Quotenmerkmal zunächst umkodiert werden muss, wird dieser PHP-Code in beiden Teilen verwendet.
-  - Falls ein Merkmal umkodiert werden muss (z.B. Alter in Alterskategorien)werden [[:de:create:questions:internal|interne Variablen]] in Verbindung mit der Funktion ''[[:de:create:functions:put]]'' verwendet+
-  - Die eigentliche Überprüfung, ob der aktuelle Teilnehmer noch teilnehmen darf. Dies erfolgt mittels der PHP-Funktion ''[[:de:create:functions:statistic]]''+
-  - Eine Umleitung (Redirect) von Teilnehmern, wenn eine demografische Zelle bereits gefüllt ist. Diese erfolgt mittels ''[[:de:create:functions:redirect]]'' und i.d.R. sind noch [[:de:create:placeholders]] erforderlich, um die Teilnehmer-ID des Panels an den Panel-Anbieter zu übermitteln ([[panels]]).+
  
-Die zentrale Funktion hierbei ist ''[[:de:create:functions:statistic]]'', sie zählt, wie viele Fragebögen mit bestimmten Kriterien bereits vorliegen. Standardmäßig zählt ''statistic()'' nur abgeschlossene Fragebögen (Variable [[:de:results:variables#interview-fortschritt|FINISHED]]), d.h. jene, bei denen die letzte Seite erreicht oder en ''redirect()'' aufgerufen wurde. 
  
-**Wichtig:** Wenn Sie ''redirect()'' verwenden, um Teilnehmer an den Anbieter zurückzuleiten, die zu schnell geantwortet haben ("Speedster") oder deren Antworten Qualitätsmängel aufweisen ("Quality"), dann setzen Sie in der ''[[:de:create:functions:redirect]]''-Funktion den zweiten Parameter (''true''), damit diese Teilnehmer nicht für die Quote gezählt werden. Damit die Teilnehmer den Fragebogen dann nicht weiter ausfüllen können, setzen Sie ein ''setNextPage('repeat');'' vor das ''redirect()''.+===== Technische Umsetzung (unverbundene Quoten=====
  
 +Die technische Umsetzung erfolgt mittels [[:de:create:php]] und umfasst mehrere Schritte. Diese werden hier zunächst für die Überprüfung von unverbundenen Quoten erklärt.
  
-===== UmsetzungEin Merkmal =====+Im folgenden werden exemplarisch zwei Merkmale quotiertAlter (offen abgefragt in Variable "SD01_01") und das Geschlecht (geschlossen abgefragt in Variable "SD02"). Es ist zweckmäßig, Qutotenfragen als [[:de:create:checks#antwortzwang|Pflichtfragen]] zu definieren.
  
-Im einfachsten Fall ist nur ein Merkmal zu quotieren. Das folgende Beispiel geht davon aus, dass Sie das Alter auf Seite 2 des Fragebogens mit einer geschlossenen Auswahl-Frage "AB01" in 6 Stufen abgefragt haben: 
  
-  1 jünger als 18 Jahre +==== Definition der Quoten ====
-  2 18-25 Jahre +
-  3 26-35 Jahre +
-  4 36-45 Jahre +
-  5 46-55 Jahre +
-  6 älter als 55 Jahre+
  
-Sie möchten nur Personen von 18 bis 45 Jahre befragen, daher werden Teilnehmer, die nicht die Antwort 2, 3 oder 4 gewählt haben, gleich via Screenout zum Panel-Anbieter zurück geschickt. Der folgende Code geht davon aus, dass Sie eine Teilnehmer-ID im Platzhalter ''%panelID%'' gespeichert haben, wie in der Anleitung empfohlen: [[:de:survey:panels]]+Zunächst wird eine Liste ([[:de:create:array|Array]]) benötigt, welches für jede Ausprägung des Merkmals die gewünschte Teilnehmerzahl vorgibt. Bei unverbundenen Quoten ist eine Quotentabelle pro Merkmal erforderlich. 
 + 
 +Im folgenden Beispiel wird der Screenout direkt in der Quotenprüfung integriert. Es wäre aber genauso ein vorgelagerter Screenout möglich.
  
 <code php> <code php>
-$ageGrp value('AB01'); +$quotaAge [ 
-if (($ageGrp < 2) or ($ageGrp 4){ +  =200,  // 200 Personen in Altersgruppe 2 (18-30 Jahre
-  // Hier der individuelle Screenout-Link für die Studie +  3 => 250,  // 250 Personen in Altersgruppe 3 (31-50 Jahre) 
-  redirect('http://www.anbieter.com/p1234567/screenout.php?id=%panelID%'); +  4 => 150   // 150 Personen in Altersgruppe 4 (51-68 Jahre) 
-}+]; 
 +$quotaGender = [ 
 +  1 => 300,  // 300 Frauen (Code 1) 
 +  2 => 300   // 300 Männer (Code 2
 +];
 </code> </code>
  
-Nun definieren Sie in einem [[de:create:array|Array]], wie viele Teilnehmer pro Ausprägung erlaubt sindIm folgenden Beispiel wären das 100 Personen in Gruppe 2 (18-25und jeweils 200 Personen in den beiden anderen Gruppen 3 und 4.+Beachten Sie, dass für die Altersgruppen 1 (Personen unter 18 Jahre) und 5 (Peronen älter als 68 Jahre) keine Einträge in der Tabelle vorliegen. Ebenso für das Geschlecht 3 (Personen, sie sich einem sonstigen Geschlecht zuordnen). Dies wird im Screenout (unten) durch die Funktion ''[[https://www.php.net/manual/de/function.array-key-exists.php|array_key_exists()]]'' abgebildet.
  
-<code php> 
-$limits = array( 
-  2 => 100, 
-  3 => 200, 
-  4 => 200 
-); 
-</code> 
  
-Dieser PHP-Code hat keine direkte Auswirkung auf die Verarbeitung der Seite. Die Obergrenzen werden erst weiter unten verwendet.+==== Merkmale auslesen und umkodieren ====
  
-Nun wird ermittelt, wie viele abgeschlossene Fragebögen für die Altergruppe des aktuellen Teilnehmers schon vorliegen. Welche Altergruppe das ist, wurde oben bereist via ''[[:de:create:functions:value]]'' ermittelt -- hat man den Screenout im selben PHP-Code wie ''statistic()'', kann die erste Zeile weggelassen werden.+Die Merkmalsausprägung des aktuellen Teilnehmers wird mittels ''value()'' ausgelesen und bei Bedarf mit einer [[:de:create:php-filters#das_schluesselwort_if|IF-Konstruktion]] umkodiert. Im vorliegenden Fall muss das Alter (offene Eingabeumkodiert werden.
  
 <code php> <code php>
-$ageGrp = value('AB01'); +// Geschlecht wird direkt ausgelesen 
-$statistic('count', 'AB01', $ageGrp);  // Abzählen der Fragebögen mit AB01 = $ageGroup+$gender = value('SD02'); 
 +// Das Alter wird umkodiert 
 +$age value('SD01_01'); 
 +if ($age < 18
 +  $ageGroup = 1; 
 +} elseif ($age <= 30) { 
 +  $ageGroup 2; 
 +} elseif ($age <= 50) { 
 +  $ageGroup = 3; 
 +} elseif ($age <= 68) { 
 +  $ageGroup = 4; 
 +} else { 
 +  $ageGroup = 5; 
 +}
 </code> </code>
  
-**Wichtig:** Die Antwort des Teilnehmers wird erst zum Server übermittelt, wenn sie der Teilnehmer mittels "Weiter" abgeschickt hat. Wenn die Frage "AB01" auf Seite 2 des Fragebogens steht, kann ''value()'' frühestens auf Seite 3 platziert werden. 
  
-In Variable ''$n'' ist nun die Anzahl der ausgefüllten Fragebögen aus der Altersgruppe des Teilnehmers (''$ageGroup'') abgelegt. Diesen Wert kann man nun mit den oben definierten Obergrenzen (''$limits'') vergleichen. Die eckigen Klammern sorgen dafür, dass die richtige Obergrenze verwendet wird.+==== Zählung der vorliegenden Fälle ====
  
-<code php> +Nun wird mitels ''statistic()'' überprüft, wie viele Datensätze mit der Ausprägung der Quotenmerkmale bereits im Datensatz vorliegen. Dieser Wert wird dann mit den oben definierten Quoten verglichen. 
-if ($n >= $limits[$ageGroup]+ 
-  // Hier der individuelle Quotafull-Link für die Studie +**Wichtig:** Damit der PHP-Code korrekt funktioniert, müssen alle Teile im selben PHP-Code Block stehen[[:de:create:variables#php-variablen|PHP-Variablen]] wie ''$quotaAge'' und ''$ageGroup'' sind nur jeweils innerhalb eines Code-Blocks gültig. 
-  redirect('http://www.anbieter.com/p1234567/quotafull.php?id=%panelID%'); + 
-} +Im folgenden Code werden __nicht__ die Variablen gezählt, mit denen die Quotenmerkmale abgefragt wurden ("SD01_01" und "SD02"), sondern interne Variablen ("SD03_01" und "SD03_02").
-</code>+
  
-Nachfolgended nochmal der komlette PHP-Code:+**Wichtig:** Die [[:de:create:questions:internal|interne Variablen]] müssen im **Fragenkatalog** vorab manuell angelegt werden.
  
 <code php> <code php>
-// Altersgruppe des aktuellen Teilnehmers auslesen +// Abruf der vorliegenden Fälle für diese Merkmalsausprägung 
-$ageGrp value('AB01');+$casesAge    statistic('count', 'SD03_01', $ageGroup); 
 +$casesGender = statistic('count', 'SD03_02', $gender);
  
 // Screenout // Screenout
-if (($ageGrp < 2or ($ageGrp > 4)) { +if (!array_key_exists($ageGroup, $quotaAge|| !array_key_exists($gender, $quotaGender)) { 
-  redirect('http://www.anbieter.com/p1234567/screenout.php?id=%panelID%');+  redirect('https://www.panelanbieter.de/?xyz=screenoutGHIJKI&uid=%reference%');
 } }
  
-// Obergrenzen +// Auslesen der Quoten für die angegeben Merkmale 
-$limits = array( +$maxPerAge    = $quotaAge[$ageGroup]
-  2 => 100, +$maxPerGender = $quotaGender[$gender];
-  3 => 200, +
-  4 => 200 +
-); +
- +
-// Ermittlung der Anzahl abgeschlossener Fragebögen in dieser Altersgruppe +
-$nQnr statistic('count', 'AB01', $ageGrp); +
-// Auslesen des Limit für diese Altergrsuppe +
-$nMax = $limits[$ageGrp];+
  
 // Quotenstopp // Quotenstopp
-if ($nQnr >= $nMax) { +if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender)) { 
-  // Hier der individuelle Quotafull-Link für die Studie +  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');
-  redirect('http://www.anbieter.com/p1234567/quotafull.php?id=%panelID%');+
 } }
 </code> </code>
  
 +Der Bool'sche Operator ''||'' ist eine ODER-Verknüpfung zwischen den zwei Bedingungen. Wenn also entweder genug Fälle für das Alter vorliegen __oder__ genug Fälle für das Geschlecht, dann erfolgt ein QuotaFull-Redirect.
  
-===== Umkodieren =====+Den Redirect-Link erhalten Sie vom Panel-Anbieter. Wichtig ist, dass Sie die Teilnehmer-ID übermitteln. Im Beispiel kommt der Platzhalter ''%reference%'' zum Einsatz. Details dazu lesen Sie hier: [[:de:survey:panels]].
  
-Falls das Alter nicht geschlossensondern offen abgefragt wurde, muss es zunächst umkodiert werdenDie Altersgruppe muss dann im Datensatz abgelegt werdendamit ''statistic()'' korrekt zählen kann.+**Wichtig:** Die Antwort des Teilnehmers wird erst zum Server übermitteltwenn sie der Teilnehmer mittels "Weiter" abgeschickt hatWenn die Fragen "SD01" und "SD02" auf Seite 2 des Fragebogens stehtkann ''value()'' und damit der obigen PHP-Code frühestens auf Seite 3 platziert werden.
  
-Legen Sie zunächst eine Frage vom Typ [[:de:create:questions:internal|interne Variablen]] an (z.B. Kennung "IV01") und darin eine Variable (Item), welche Sie z.B. mit "Altersgruppe" beschriften (Kennung z.B. "IV01_01"). 
  
-Das folgende Beispiel geht davon ausdass die offene Frage nach dem Alter mit einer Texteingabe (Beschränkung "nur Ziffern"mit der Kennung "AB02_01" abgefragt wird.+==== Kopieren der Quotenmerkmale ==== 
 + 
 +Zuletzt müssen die Quoten-Merkmale noch in die internen Variablen kopiert werden. Das heißtdirekt vor dem Complete-Redirect, welches üblicherweise auf der vorletzten Seite des Fragebogen platziert wird. 
 + 
 +Hierzu benötigen Sie __erneut__ den PHP-Code aus dem Abschnitt [[#Merkmale_auslesen_und_umkodieren|Merkmale auslesen und umkodieren]] (obenund im selben PHP-Code Block direkt darunter die Funktion ''[[:de:create:functions:put]]'' zum Setzen der internen Variablen.
  
 <code php> <code php>
-$age = (int)value('AB02_01');+put('SD03_01', $ageGroup)
 +put('SD03_02', $gender); 
 +</code>
  
-// Umkodieren +Danach folgt üblicherweise der Complete-Redirect.
-if ($age < 18) { +
-  $ageGrp = 1; +
-} elseif ($age <= 25) { +
-  $ageGrp = 2; +
-} elseif ($age <= 35) { +
-  $ageGrp = 3; +
-} elseif ($age <= 45) { +
-  $ageGrp = 4; +
-} else { +
-  $ageGrp = 5; +
-}+
  
-// Im Datensatz speichern +<code php> 
-put('IV01_01', $ageGrp);+redirect('https://www.panelanbieter.de/?xyz=completeDEFGHI&uid=%reference%');
 </code> </code>
  
-Dieser PHP-Code wird einfach vor die Qutierung (s. oben) gesetzt. Im PHP-Code für die Quotierung würde dann ''AB01'' durch ''IV01_01'' (die kennung der internen Variable) ersetzt. 
  
 +===== Verbundene Quoten =====
  
-===== Unverbundene Quoten =====+==== Quotenprüfung zu Beginn ====
  
-Die Prüfung unverbundener Quoten erfolgt nun einfach dadurchdass man den PHP-Code für die Quotierung (soben) für jedes Merkmal wiederholt. Dabei müssen lediglich die Kennung für die Variable (''AB01''und die Obergrenzen (''$limits'') angepasst werden.+Wenn Sie mit verbundenen Quoten arbeitenmüssen Sie eine größere Anzahl an Quoten definieren: Ein Grenzwert pro demografischer ZelleBei 3 Ausprägungen für das Alter und 2 Ausprägungen für das Geschlecht sind das insgesamt 6 Quoten.
  
 +Im folgenden PHP-Code wird eine demografische Zelle durch einen Code aus Altersgruppe (2-4) und Geschlecht (1-2) definiert. Die 6 Quoten sind der Übersichtlichkeit halber in 3 Zeilen mit jeweils 2 Quoten notiert -- technisch macht es keinen Unterschied, ob nach dem Komma ein Zeilenumbruch folgt.
  
-===== Verbundene Quoten =====+<code php> 
 +$quota 
 +  '2-1' => 100, '2-2' => 100,  // 100 Personen pro Geschlecht für die Altersgruppe 1 
 +  '3-1' => 125, '3-2' => 125,  // 125 Personen pro Geschlecht für die Altersgruppe 2 
 +  '4-1' => 75,  '4-2' => 75    //  75 Personen pro Geschlecht für die Altersgruppe 3 
 +]; 
 +</code>
  
-Für verbundene Quoten wird ''statistic('crosscount', ...)'' statt ''statistic('count', ...)'' eingesetzt. Außerdem muss eine ID für die demografische Zelle erstellt werden.+Das Auslesen der quotenrelevanten Ausprägungen und das Umkodieren erfolgt zunächst genauso wie bei den unverbundenen Quoten.
  
-Das folgende Beispiel geht davon aus, dass die Altergruppe in Variable "IV01_01" vorliegt (Codes 2 bis 4, s. obenund das Geschlecht in Variable "AB03" (1=weiblich, 2=männlich).+<code php> 
 +// Geschlecht wird direkt ausgelesen 
 +$gender = value('SD02'); 
 +// Das Alter wird umkodiert 
 +$age = value('SD01_01')
 +if ($age < 18) { 
 +  $ageGroup = 1
 +} elseif ($age <= 30) { 
 +  $ageGroup = 2
 +} elseif ($age <50
 +  $ageGroup = 3; 
 +} elseif ($age <= 68) { 
 +  $ageGroup = 4; 
 +} else { 
 +  $ageGroup = 5; 
 +
 +</code>
  
-Als Kennung für die demografische Zelle werden die beiden Zahlen einfach durch einen Bindestrich getrennt zusammengefügt. Der String '''2-1''' steht dann für weibliche Teilnehmer (2aus der Altersgruppe 18-25 Jahre (1). Anhand dieser Kennungen werden die Obergrenzen definiert.+Allerdings wird zusätzlich noch eine Variable definiert, welche den Code der demografischen Zelle beinhaltet. Der Punkt (''.''dient in PHP zum Aneinanderfügen von Texten (Verketten von Strings).
  
 <code php> <code php>
-// Merkmale auslesen +// Definition einer Variable mit Altesgruppe und Geschlecht 
-$ageGrp = value('IV01_01'); +// Aus 3 und 2 wird hier '3-2
-$gender value('AB03');+$demGroup $ageGroup.'-'.$gender; 
 +</code>
  
-// Evtl. Screenout +Die Quotenprüfung erfolgt nun für dieses (kombinierte) Merkmal. Erneut wird eine interne Variable (SD04_01) verwendet, die vorab im **Fragenkatalog** definiert werden muss. 
-if (($ageGrp < 2) or ($ageGrp > 4) or ($gender < 1)) { + 
-  redirect('http://www.anbieter.com/p1234567/screenout.php?id=%panelID%');+<code php> 
 +// Abruf der vorliegenden Fälle für diese Merkmalsausprägung 
 +$cases = statistic('count', 'SD04_01', $demGroup); 
 + 
 +// Screenout 
 +if (!array_key_exists($demGroup, $quota)) { 
 +  redirect('https://www.panelanbieter.de/?xyz=screenoutGHIJKI&uid=%reference%');
 } }
  
-// Kennung für die demografische Zelle erstellen +// Auslesen der Quote für die demografische Gruppe 
-$demID = $ageGrp.'-'.$gender;+$maxPerGroup = $quota[$demGroup];
  
-// Obergrenzen definieren +// Quotenstopp 
-$limits array( +if ($cases >$maxPerGroup) { 
-  '1-1' => 50, +  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%'); 
-  '1-2' => 50, +} 
-  '2-1' => 100, +</code>
-  '2-2' => 100, +
-  '3-1' =100, +
-  '3-2' => 100 +
-);+
  
-// Abgeschlossene Fragebögen zählen 
-$n = statistic('crosscount', array('IV01_01', 'AB03'), array($ageGrp, $gender)); 
  
-// Quoten prüfen +==== Speicherung des Zellen-Codes ==== 
-if ($n > $limits[$demID]{ + 
-  redirect('http://www.anbieter.com/p1234567/quotafull.php?id=%panelID%');+Vor dem Complete-Redirect muss der Code für die demografische Zelle in die interne Variable gespeichert werden. 
 + 
 +<code php> 
 +// Speichern der Gruppenzugehörigkeit in der internen Variable SD04_01 
 +put('SD04_01', $demGroup); 
 +</code> 
 + 
 +Damit dieser Code funktioniert, müssen auch hier die Quotenausprägungen abgerufen und umkodiert werdenUnd natürlich müssen sie zum Zellen-Code ''$demGroup'' verkettet werdenDer vollständige Code für die vorletzte Fragebogen-Seite einschließlich Complete-Redirect sieht demnach wie folgt aus. 
 + 
 +<code php
 +// Geschlecht wird direkt ausgelesen 
 +$gender value('SD02')
 +// Das Alter wird umkodiert 
 +$age = value('SD01_01'); 
 +if ($age < 18) { 
 +  $ageGroup = 1; 
 +} elseif ($age <= 30) { 
 +  $ageGroup = 2; 
 +} elseif ($age <= 50) { 
 +  $ageGroup = 3; 
 +} elseif ($age <= 68) { 
 +  $ageGroup = 4; 
 +} else { 
 +  $ageGroup = 5;
 } }
 +
 +// Definition einer Variable mit Altesgruppe und Geschlecht
 +// Aus 3 und 2 wird hier '3-2'
 +$demGroup = $ageGroup.'-'.$gender;
 +
 +// Speichern der Gruppenzugehörigkeit in der internen Variable SD04_01
 +put('SD04_01', $demGroup);
 +
 +// Complete-Redirect
 +redirect('https://www.panelanbieter.de/?xyz=completeDEFGHI&uid=%reference%');
 </code> </code>
de/survey/quota.txt · Zuletzt geändert: 09.01.2023 22:25 von admin
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki