0 votes
in SoSci Survey (dt.) by s090684 (335 points)

Liebes Support Team,

ich möchte nach Geschlecht quotieren und habe dafür folgenden Code auf der Seite nach der Geschlechtsabfrage platziert:

//Interne Variable Quotenzählung Gender: RO12_01 

$quotaGender = [
  1 => 1,  // 1010 Frauen
  2 => 1   // 990 Maenner
];

//BLOCK 2
$gender = value('SD01');
if ($gender = 1) { //weiblich
  $genderGroup = 1; 
} elseif ($gender = 2) { //maennlich
  $genderGroup = 2;
} elseif ($gender = 3) { //non-binaer
  question('RO13');
  $genderGroup = value('RO13');
}

//BLOCK 3
// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesGender = statistic('count', 'RO12_01', $genderGroup);
 
// Auslesen der Quoten für die angegeben Merkmale
$maxPerGender = $quotaGender[$genderGroup];

// Zusätzliche Informationen anzeigen
debug($casesGender);
debug($maxPerGender);
 
// Quotenstopp
if (($casesGender >= $maxPerGender)) {
  //redirect('LINK%reference%');
html('<p>Redirect ausgelöst</p>');
  pageStop();
}

Und folgenden Code auf der letzten Fragebogenseite:

$gender = value('SD01');
if ($gender = 1) { //weiblich
  $genderGroup = 1; 
} elseif ($gender = 2) { //maennlich
  $genderGroup = 2;
} elseif ($gender = 3) { //non-binaer
  question('RO13');
  $genderGroup = value('RO13');
}

put('RO12_01', $genderGroup);
$genderGroup = (int)value('RO12_01');

redirect('LINK%reference%');

Zu Testzwecken sind die Quoten je Gruppe auf 1 gesetzt.

Wenn ich in einem ersten Durchlauf "weiblich" auswähle zeigen die Variablen im Debug Modus folgende Werte:

$casesGender = 0
$maxPerGender = 1

Der redirect wird nicht ausgelöst und ich kann die Befragung bis zum Schluss ausfüllen. Ich mache das, indem ich im Debug Modus direkt zur letzten Seite springe. Ich erreiche den complete redirect und beende die Befragung, gehe dabei über den put-Befehl.

Wenn ich in einem zweiten Durchlauf "männlich" auswähle, zeigen die Varialben im Debug Modus folgende Werte:

$casesGender = 1
$maxPerGender = 1

Der Redirect wird ausgelöst. (Quotenstopp)

Wenn ich die Daten lösche und mit "männlich" anfange, sind die Werte auf den Variablen genau die gleichen.

Auch gleich ist das, was auf meiner internen Varialbe (hier R012_01) abgespeichert wird. In der Datenansicht liegt da immer eine 1 drin, egal ob ich im ersten Durchlauf männlich oder weiblich ausgewählt habe. Ich vermute, dass da der Fehler liegt, denn diese Variable sollte die Gruppe speichern, die in einem Fall 1 und im anderen Fall 2 sein sollte.

Ich weiss leider nicht weiter und würde mich über Hilfe freuen.
Besten Dank!

by SoSci Survey (327k points)
> Auch gleich ist das, was auf meiner internen Varialbe (hier R012_01) abgespeichert wird.

Also eigentlich müsste RO12_01 (Buchstabe "O", nicht Null "0" laut Ihrem Code) denselben Code wie SD01 speichern - außer wenn SD01 den Code 3 hat, dann muss derselbe Code wie in RO13 in RO12_01 stehen.

Könnten Sie das wohl bitte nochmal prüfen. Danke.

Posten Sie bitte ggf. auch nochmal die Debug-Information, die angezeigt wird, wenn Sie das Geschlecht ausgewähl und anschließend auf "Weiter" geklickt haben. Eventuell stimmt einfach die Kennung SD01 nicht.
by s090684 (335 points)
Vielen Dank, ich schreibe eine neue Antwort, weil ich im Kommentar kein Bild einfügen kann.

1 Answer

0 votes
by s090684 (335 points)

Der zweite Fall hat ein Missing, weil der redirect ausgelöst wurde und nie über put gekommen bin. Die Variable speichert immer eine 1, auch wenn ich in SD01 weiblich oder "ein anderes" auswähle.

Die SD01 ist wie folgt codiert:

SD01 gender
1 = weiblich
2 = männlich
3 = ein anderes, und zwar:
-9 = nicht beantwortet

SD01_03 ein anderes, und zwar
Offene Texteingabe

Debug Info auf der Seite nach der Geschlechtsabfrage, wenn weiblich ausgewählt wurde:

[Information] Interview Nummer 762 wird fortgesetzt
[Information] Der Fragebogen main im Projekt infoab wird verwendet
[Information] Die Verweildauer auf Seite 2 war 15 Sekunden
[Verarbeitung] Lese Antworten von Seite 2
[Information] Antwort auf SD01 = 1
[Information] Keine Antwort für SD01_03
[Information] Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung] Erstelle Seite 3 in Fragebogen main
[Information] value("SD01") = 1
debug() Inhalt: $casesGender = 1 (integer)
debug() Inhalt: $maxPerGender = 1 (integer)
[Inhalt] Die Verarbeitung der Seite wurde durch pageStop() beendet

Debug Info auf der Seite nach der Geschlechtsabfrage, wenn männlich ausgewählt wurde:

[Information] Interview Nummer 763 wird fortgesetzt
[Information] Der Fragebogen main im Projekt infoab wird verwendet
[Information] Die Verweildauer auf Seite 2 war 4 Sekunden
[Verarbeitung] Lese Antworten von Seite 2
[Information] Antwort auf SD01 = 2
[Information] Keine Antwort für SD01_03
[Information] Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung] Erstelle Seite 3 in Fragebogen main
[Information] value("SD01") = 2
debug() Inhalt: $casesGender = 1 (integer)
debug() Inhalt: $maxPerGender = 1 (integer)
[Inhalt] Die Verarbeitung der Seite wurde durch pageStop() beendet

Debug Info auf der Seite nach der Geschlechtsabfrage, wenn "ein anderes" ausgewählt wurde:

[Information] Interview Nummer 764 wird fortgesetzt
[Information] Der Fragebogen main im Projekt infoab wird verwendet
[Information] Die Verweildauer auf Seite 2 war 10 Sekunden
[Verarbeitung] Lese Antworten von Seite 2
[Information] Antwort auf SD01 = 3
[Information] Antwort auf SD01_03 = test
[Information] Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung] Erstelle Seite 3 in Fragebogen main
[Information] value("SD01") = 3
debug() Inhalt: $casesGender = 1 (integer)
debug() Inhalt: $maxPerGender = 1 (integer)
[Inhalt] Die Verarbeitung der Seite wurde durch pageStop() beendet

by SoSci Survey (327k points)
Liegt im Datensatz denn schon ein Fall vor, bei dem RO12_01 den Wert 2 hat?
by s090684 (335 points)
Nein. Wie gesagt, es wird immer eine 1 abgespeichert.
by s090684 (335 points)
Wenn ich die Recodierung rausnehme und die Codierung für $gender direkt aus der SD01 auslese, wird intern richtig mitcodiert.

$gender = value('SD02');

Wenn ich die Recodierung für non-binäre rausnehme und zwei Gruppen für männliche und weibliche Fälle anlege, wird auf RO12_01 wieder nur die 1 abgespeichert, egal was auf SD01 eigentlich für ein Wert liegt.  

$gender = value('SD01');
if ($gender = 1) {
  $genderGroup = 1;
} else {
  $genderGroup = 2;
}

Es muss einen Fehler in der Recodierung geben, für den ich scheinbar blind bin.
by SoSci Survey (327k points)
Ich sehe das Problem - arg, hätte ich früher bemerken können.

if ($gender = 1) { //weiblich
   ---

Sie verwenden hier nur ein (!) Gleichheitszeichen. Das ist der Operator zum Setzen einer Variable. Hier wird $gender also der Wert 1 zugewiesen. Korrekt sind doppelte Gleichheitszeichen:

if ($gender == 1) { //weiblich
  $genderGroup = 1;
} elseif ($gender == 2) { //maennlich
  $genderGroup = 2;
} elseif ($gender == 3) { //non-binaer
  question('RO13');
  $genderGroup = value('RO13');
}
by s090684 (335 points)
Ach, bestens! Vielen Dank, das hätte ich genauso sehen können. Die interne Variable speichert jetzt richtig ab, inkl. zufälliger Zuweisung non-binärer Personen. Ich denke, wir können ins Feld. Vielen Dank für die stetige Hilfe, ich weiss das sehr zu schätzen.

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

...