0 votes
in SoSci Survey (dt.) by s139044 (135 points)
edited by s139847

Hallo

Ich habe bei einer Umfrage eine verbundene Quote (Geschlecht x Alter), die dank Ihrer Anleitung auch wunderbar funktioniert.

Die Quote ist jedoch aktuell so eingestellt, dass wenn Leute beim Gechlecht "divers" (Wert 3) angeben ausgescreent werden.
Jetzt meinte aber meine Chefin, dass das nicht so sein soll und ich die "diversen" zufällig auf Männer und Frauen verteilen soll. Und da ist jetzt mein Problem, ich komme da nicht weiter!

Es müsste wie ein if value SD02 ==3 -> dann in 1 oder 2 umkodieren. Aber ich kenne mich mit den PHP codes einfach noch viel zu wenig aus, als dass ich eine ahnung hätte, wie man das machen könnte.

Ist das überhaupt möglich? Und wenn ja, wie?
Oder gibt es da eine elegantere Lösung?

Vielen lieben Dank!
Liebe Grüsse

Hier ist übrigens mein Code für die Quote bis jetzt (die redirect-Links sind noch Platzhalter zum schauen ob es funktioniert, deswegen sind die komisch, nicht beachten):

$quota = [
  '2-1' => 50, '2-2' => 50,  // 50 Personen pro Geschlecht für die Altersgruppe 1
  '3-1' => 50, '3-2' => 50,  // 50 Personen pro Geschlecht für die Altersgruppe 2
  '4-1' => 50,  '4-2' => 50,    //  50 Personen pro Geschlecht für die Altersgruppe 3
  '5-1' => 50,  '5-2' => 50,    //  50 Personen pro Geschlecht für die Altersgruppe 4
  '6-1' => 50,  '6-2' => 50,    //  50 Personen pro Geschlecht für die Altersgruppe 5
  '7-1' => 50,  '7-2' => 50    //  50 Personen pro Geschlecht für die Altersgruppe 6

];


// Geschlecht wird direkt ausgelesen
$gender = value('SD02');


// Das Alter wird umkodiert
$age = value('SD07_01');
if ($age < 18) {
  $ageGroup = 1;
} elseif ($age <= 29) {
  $ageGroup = 2;
} elseif ($age <= 39) {
  $ageGroup = 3;
} elseif ($age <= 49) {
  $ageGroup = 4;
} elseif ($age <= 59) {
  $ageGroup = 5;
} elseif ($age <= 69) {
  $ageGroup = 6;
} else {
  $ageGroup = 7;
}

// Definition einer Variable mit Altesgruppe und Geschlecht
// Aus 3 und 2 wird hier \3-2\
$demGroup = $ageGroup.'-'.$gender;

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$cases = statistic('count','IV03_01',$demGroup);
 
// Screenout
if (!array_key_exists($demGroup, $quota)) {
  redirect('https://www.linguee.de/englisch-deutsch/uebersetzung/screen+out.html');
}

// Auslesen der Quote für die demografische Gruppe
$maxPerGroup = $quota[$demGroup];
 
// Quotenstopp
if ($cases >= $maxPerGroup) {
  redirect('https://support.soscisurvey.de/?qa=20808/quotenstopp-und-redirect');
}

1 Answer

0 votes
by s139847 (2.7k points)

Am besten legen Sie sich einen Zufallsgenerator mit den Zahlen 1 und 2 an und lassen den einmal ziehen. Dann können Sie abfragen und neu zuweisen mit

if ($gender == 3){
   $gender = value('Ihr Zufallsgenerator);
}

Damit weisen Sie dann Leuten, die divers angekreuzt haben zufällig eine der anderen beiden Gruppen zu.

by s139044 (135 points)
Vielen lieben Dank für die schnelle Antwort!

Ich habe jetzt nur noch ein kleines Problem.

Wenn die Quote voll ist und die diversen zufällig zugeordnet werden, dann erkennt es die volle Quote korrekt und ich werde auf den Quotenfull Link weitergeleitet.

Wenn die Quote aber noch nicht voll ist, scheint sie sich mit den diversen nicht zu füllen.

Also wenn z.B. die Quote 5 Männer und 5 Frauen ist, diese aber noch nicht voll ist kann ich den Fragebogen dutzende Male mit diversen ausfüllen, es füllt die Quote nicht auf.

Woran könnte das liegen?
by s139847 (2.7k points)
Ich nehme an es liegt an der Stelle, an der Sie die existierenden Fälle durchzählen, darf ich Sie kurz fragen, was 'IV03_01' bei Ihnen ist?
by s139044 (135 points)
'IV03_01'  ist die interne Variable in welcher die Quoten gespeichert werden.
Also z.B. wäre der Wert "5-1" eine weibliche Person in den 50ern.
Ich sehe gerade bei den Daten, dass dort trotz der Zufallsziehung im Falle von 3, bei bei den Werten dieser interner Variable trotzdem "-3" (also z.B. 5-3) steht. Ihre Annahme scheint also zu stimmen.
Wie kann ich das ändern?
by s139847 (2.7k points)
ich kann im Code oben nicht die Stelle sehen, an der Sie IV03_01 zuweisen, nur, wo Sie drauf zugreifen, können Sie einmal den ganzen verwendeten Code dafür posten?
by s139044 (135 points)
Dank Ihrer Nachfrage habe ich den Fehler gefunden. Ich muss natürlich dort wo der Inhalt der Variable gespeichert wird auch noch diesen IF Befehl einfügen, das hatte ich ganz vergessen.
Jetzt funktioniert alles einwandfrei!

Vielen lieben Dank für die superschnelle Hilfe!

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

...