0 votes
in Methoden-Fragen by s299132 (170 points)
edited by s299132

Hallo,

ich würde gern es einstellen, dass meine Umfrage schaut, wieviele Leute mit einem bestimmten Merkmal das Ende der Umfrage erreicht haben?

Ich habe auch auf Seite 24 ein redirect eingebettet, daher, würde mein einfaches "beendet" so aussehen, ich denke:
$finished = statistic('count', 'LASTPAGE', 24);

... würde es so aussehen, wenn ich auch Anzahl von nur Frauen (SD03_02==2) zusammenzählen würde?
$finished_female = statistic('count', array('LASTPAGE',SD03_02), array(24,2));

Komplette Quotierungscode wäre dann wie folgt, richtig?

$quotaGender = [ 1 => 300, // 300 Männer (Code 1) 2 => 300 // 300 Frauen (Code 2) ];

$gender = value('SD02');
$maxPerGender = $quotaGender[$gender];

$finished_female = statistic('count', array('LASTPAGE','SD03_02'), array(24,2));

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

Vielen Dank nochmal für die Rückmeldung!

1 Answer

0 votes
by SoSci Survey (327k points)
selected by s299132
 
Best answer

Ich würde eher vorschlagen, das Quotenmerkmal am Ende des Fragebogen in eine interne Variable zu kopieren, und dann für di Quotierung nur dies zu zählen: Kopieren der Quotenmerkmale.

by s299132 (170 points)
Vielen Dank für die Rückmeldung.
Wenn ich es richtig verstehe - man zählt die Merkmale nur am Ende. Aber dann wie füttere ich diese Information am Anfang der Umfrage wieder ein?
Aber diese Information braucht man am Anfang?

Wäre es so was die Lösung?

$quotaGender = [ 1 => 300, // 300 Männer (Code 1)
2 => 300 // 300 Frauen (Code 2) ];

$gender = value('SD02');
$maxPerGender = $quotaGender[$gender];

$GenderCurrentNr= $GenderFinished+$gender;

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

//Letzte Seite
put(''SD02', $GenderFinished);
by SoSci Survey (327k points)
> man zählt die Merkmale nur am Ende.

Nein, nicht ganz. Gezählt wird zu Beginn (also nach Abfrage der Merkmale). Aber die Variable, die gezählt wird, ist eine Kopie der Angaben in einer internen Variable - und diese wird erst am Ende kopiert, sodass die Variable für Abbrecher leer bleibt.

Im statistic()-Befehl zählen Sie also z.B. wie häufig die Antwort aus SD02 bereits in der internen Variable IV01_01 vorkommt, wobei IV01_01 entweder den Wert aus SD02 enthält oder eben nichts, bei Abbrechern.
by s299132 (170 points)
Vielen Dank nochmal für die Antwort erneut.
OK, ich denke, es ist nun klarer.  Das heißt, ich faktisch "sage" mit dem statistic() Befehl, dass "zähle aus der internen Variable alle Leute die die gleiche Merkmale habe, also meine Aktuelle Person, und wenn diese Auspräfung die Quotengrenze erreicht hat, bitte ein Quotenstop einlegen."
Es würde deine bei einem Merkmal so aussehen:
$quotaGender = [ 1 => 300, // 300 Männer (Code 1) 2 => 300 // 300 Frauen (Code 2) ];

$gender = value('SD02');
$maxPerGender = $quotaGender[$gender];

$casesGender = statistic('count', $GenderFinished, $gender);

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

//Letzte Seite
put(''SD02', $GenderFinished);
by SoSci Survey (327k points)
Als zweiten Parameter bei statistic() würden Sie die Kennung der internen Variable einsetzen. Wenn Sie diese in  $GenderFinished abgelegt haben, dann würde es so funktionieren, ja. Aber diese PHP-Variable müssten Sie dann auf beiden Seiten setzen.
by s299132 (170 points)
ja, genau wie ich oben im Code steht.

Aber bei der alleersten Umfrage existiert noch $GenderFinished Variable, weil es wird am Ende der Umfrage erzeugt. Müsste dann jeden Quotierungsdurchlauf in einem "if" Befehl eingebettet sein, wie folgt dann, richtig?


$gender = value('SD02');
$maxPerGender = $quotaGender[$gender];
if (array_key_exists($casesGender) {
$casesGender = statistic('count', $GenderFinished, $gender);
// Quotenstopp
if ($casesGender >= $maxPerGender) {
redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');
}
}
//Letzte Seite
put(''SD02', $GenderFinished);
by SoSci Survey (327k points)
Aus meiner Sicht müssten Sie $GenderFinished einfach durch "IV01_01" ersetzen bzw. wie Ihre interne Variablen eben heißt.

Und auf der letzten Seite müssten Sie den Code wie folgt ändern:

$gender = value('SD02');
put(''IV01_01', $gender);
by s299132 (170 points)
Hallo, es kann sein, dass dies grundsätzlich geht, aber, wie schon zuvor geschrieben: bei der alle erste Umfrage müsste irgendwas vorgeschaltet werden.

Ich bekomme ich die folgende Fehlermeldung zur Zeit, weil die interne Variable, die man am Ende erstell, erkennt es nicht am Anfang (logischerweise):
"Konnte Frage bzw. Item mit der Kennung IV01_01 nicht finden!"

Hier ist der Gesamt-Code:
// Nach der SA01 Frage
$quotaGender = [
  1 => 2,  // 1 Women (Code 01)
  2 => 2,   // 0 Men (Code 02)
];


$gender = value('SA01');
$maxPerGender = $quotaGender[$gender];

$casesGender = statistic('count', 'IV01_01', $gender);
// Quotenstopp
if ($casesGender >= $maxPerGender) {
   redirect('https://www.youtube.com/watch?v=ybhNTqetubQ');
}


//Letzte Seite:
$gender = value('SA01');
put('IV01_01', $gender);

Danke schön für die Rückmeldung erneut

Was sollte vor "$casesGender = statistic('count', 'IV01_01', $gender);" zugeschaltet werden?
by s299132 (170 points)
edited by s299132
... OK, ich denke, ich habe es.
im Endeffekt bei der IV01_1 handelt es sich um die erste Item der internen Variable.
Damit funktioniert es. Vielen Dank nochmal für Ihre Hilfe.

Zusammengefastt die Lösung:
Vor der PHP-Code zu Quotierung, Interne Variable IV01 einfügen.
Gleiche Seite, die folgende PhP Befehel kommen:

$quotaGender = [
  01 => 2,  // 1 Women (Code 01)
  02 => 2,   // 0 Men (Code 02)
];


$gender = value('SA01');
$maxPerGender = $quotaGender[$gender];

$casesGender = statistic('count', 'IV01_1', $gender);
if ($casesGender >= $maxPerGender) {
   redirect('https://www.youtube.com/watch?v=ybhNTqetubQ');
}


Letzte Seite:
$gender = value('SA01');
put('IV01_01', $gender);
by s299132 (170 points)
edited by s299132
Hallo, leider scheint es nicht alles komplett glatt zu sein. Leider bekomme ich inzwischen aber eine Fehlermeldung - es ist auch nicht klar, woran es liegt. Können Sie hier noch kurz helfen, danke schön.

Fehlermeldung:
"Items in der nachfolgenden Fragen werden auf dieser Seite schon weiter oben angezeigt. Dies führt fast zwangsläufig zu Datenverlust! Falls Sie eine Frage mehrfach benötigen, legen Sie bitte eine Kopie der Frage an. Betroffen sind folgende Items: IV01_01."

Leiche Änderung an dem Code:
$quotaGender = [
  1 => 2,  // 2 Women (Code 01)
  2 => 2,   // 2 Men (Code 02)
  3 => 500,   // Unlimited diverse (Code 03)
];

$gender = value('SA01');
$maxPerGender = $quotaGender[$gender];

$casesGender = statistic('count', 'IV01_1', $gender);
if ($casesGender >= $maxPerGender) {
   redirect('https://www.youtube.com/watch?v=ybhNTqetubQ');
}


Letzte Seite:
$gender = value('SA01');
put('IV01_01', $gender);
by SoSci Survey (327k points)
> Betroffen sind folgende Items: IV01_01

Haben Sie IV01 auf der Seite eingebunden? Also z.B. in die Seite gezogen und/oder per show() oder question() eingebunden? Wenn Sie nur mit put() arbeiten, tun Sie das nicht. Man braucht die Frage nur auf der Seite, wenn man mit JavaScript arbeitet.

> $casesGender = statistic('count', 'IV01_1', $gender);

Es ist vermutlich IV01_01 und nicht IV01_1.
by s299132 (170 points)
Hallo, vielen Dank für die Rückmeldung. Ja, habe ich.
Hier ist das (es ist zur Zeit noch eine Testversion, bevor ich es in den komplexeren Fragebogen die Quotierung einstelle).
Hier ist das gesamte Interne-Code (Achtung, statt IV01... habe ich QU01, das durfte nicht das Problem sein... bis jetzt habe ich es einfach im Forum mit IV01_01 ersetzt - um die gleiche Terminologie zu haben).

<?xml version="1.0"?>
<questionnaire>

<!-- Seite 1 -->
<page intID="1">
<question id="SA01" intID="2" />
</page>


<!-- Seite 2 -->
<page intID="3">
<question id="QU01" intID="11" />
<php intID="4"><![CDATA[
$quotaGender = [
  1 => 2,  // 2 Women (Code 01)
  2 => 2,   // 2 Men (Code 02)
  3 => 500,   // Almost unlimited diverse (Code 03)
];


$gender = value('SA01');
$maxPerGender = $quotaGender[$gender];
$casesGender = statistic('count', 'QU01_01', $gender);

if ($casesGender >= $maxPerGender) {
  redirect('https://www.youtube.com/watch?v=ybhNTqetubQ');
}


]]></php>
</page>


<!-- Seite 3 -->
<page intID="5">
<php intID="6"><![CDATA[
$gender = value('SA01');
put('QU01_01', $gender);
]]></php>
</page>


<!-- Seite 4 -->
<page intID="7">
<php intID="8">
redirect('https://www.youtube.com/watch?v=aff-hY_hDyw');
</php>
</page>


</questionnaire>

Darüber hinaus: kann ich die Quotierung auch nicht zurücksetzen.

Noch eventuell relevante Information: Meine Uni benutzt Programm-Version 3.5.01.
by s299132 (170 points)
Hallo, wir haben zufällig die Lösung gefunden (vielleicht handelt es um ein Bug?): es muss vor dem Abschluss ein zusätzliche Variable auftauchen... und dann funktioniert es. Anbei den InternCode:

<?xml version="1.0"?>
<questionnaire>

<!-- Seite 1 -->
<page intID="1">
<question id="SA01" intID="2" />
</page>


<!-- Seite 2 -->
<page intID="3">
<question id="QU01" intID="11" />
<php intID="4"><![CDATA[
$quotaGender = [
  1 => 2,  // 150 Women (Code 01)
  2 => 0,   // 150 Men (Code 02)
  3 => 500,   // 500 diverse (Code 03)
];


$gender = value('SA01');
$maxPerGender = $quotaGender[$gender];
$casesGender = statistic('count', 'QU01_01', $gender);

if ($casesGender >= $maxPerGender) {
  redirect('https://www.youtube.com/watch?v=ybhNTqetubQ');
}
]]></php>
</page>


<!-- Seite 3 -->
<page intID="9">
<question id="SA08" intID="10" />
</page>


<!-- Seite 4 -->
<page intID="5">
<php intID="6"><![CDATA[
$gender = value('SA01');
put('QU01_01', $gender);
]]></php>
</page>


<!-- Seite 5 -->
<page intID="7">
<php intID="8">
redirect('https://www.youtube.com/watch?v=aff-hY_hDyw');
</php>
</page>


</questionnaire>
by SoSci Survey (327k points)
> es muss vor dem Abschluss ein zusätzliche Variable auftauchen

Was genau meinen Sie?
by s299132 (170 points)
....In Version 1 zwischen das PhP-Code zur Quotierung und put()-Befehl gibt es keine weitere Variable/Frage. In Version 2 zwischen das PhP-Code zur Quotierung und put()-Befehl gibt es noch eine Frage.

In Version 1, bekommt man die Fehlermeldung "tems in der nachfolgenden Fragen werden auf dieser Seite schon weiter oben angezeigt. Dies führt fast zwangsläufig zu Datenverlust! Falls Sie eine Frage mehrfach benötigen, legen Sie bitte eine Kopie der Frage an. Betroffen sind folgende Items: QU01_01.". Bei Version 2 nicht. Übrigens, wenn ich die Variable woanders verschiebe, und wieder das put()-Befehl das PhP-Code zur Quotierung folgt, bekommt man wieder diese Fehlermeldung (siehe Interne Code unten).




<?xml version="1.0"?>
<questionnaire>

<!-- Seite 1 -->
<page intID="1">
<question id="SA01" intID="2" />
</page>


<!-- Seite 2 -->
<page intID="9">
<question id="SA08" intID="10" />
</page>


<!-- Seite 3 -->
<page intID="3">
<question id="QU01" intID="11" />
<php intID="4"><![CDATA[
$quotaGender = [
  1 => 2,  // 150 Women (Code 01)
  2 => 0,   // 150 Men (Code 02)
  3 => 500,   // 500 diverse (Code 03)
];


$gender = value('SA01');
$maxPerGender = $quotaGender[$gender];
$casesGender = statistic('count', 'QU01_01', $gender);

if ($casesGender >= $maxPerGender) {
  redirect('https://www.youtube.com/watch?v=ybhNTqetubQ');
}
]]></php>
</page>


<!-- Seite 4 -->
<page intID="5">
<php intID="6"><![CDATA[
$gender = value('SA01');
put('QU01_01', $gender);
]]></php>
</page>


<!-- Seite 5 -->
<page intID="7">
<php intID="8">
redirect('https://www.youtube.com/watch?v=aff-hY_hDyw');
</php>
</page>


</questionnaire>
by SoSci Survey (327k points)
> Items in der nachfolgenden Fragen werden auf dieser Seite schon weiter oben angezeigt

Danke für die Erläuterung. Interessant, dass diese Fehlermeldung überhaupt auftaucht. SOllte sie m.E. nicht. Aber das muss ich mir mal in einem Testprojekt im Kontext ansehen.

Der technische Unterschied besteht darin, dass im ersten Fall die beiden Seiten mit dem Quotencheck (die ja keinen Inhalt zeigt, und deshalb direkt zur nächsten Seite weiter springt) gemeinsam mit dem put() angezeigt wird und im zweiten Fall mit der Frage SA08.

Für Ihr Projekt sollte die Klärung des Problems nicht weiter relevant sein, denn ich gehe davon aus, dass Sie zwischen Quotencheck und redirect()/put() ohnehin noch Fragen anzeigen möchten.
by s299132 (170 points)
... genau. Deswegen habe ich es mal hier klar geschildert - für die weitere Entwicklung und für anderen, bei wem dieses Problem auftaucht.
Vielen Dank nochmal für den Geduld - es war kein einfaches Durchgang.

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

...