Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
de:survey:quota [19.07.2017 20:16]
autsch [Quotierung]
de:survey:quota [01.12.2019 12:04] (aktuell)
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.1500488207.txt.gz · Zuletzt geändert: 19.07.2017 20:16 von autsch
 
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