0 votes
in SoSci Survey (dt.) by s110744 (190 points)

Hallo,

ich habe eine Frage zu einer Quotierung meines Fragebogens. Das Ziel ist es drei Regionen (drei Gruppen mit ca. 100 Postleitzahlen) mit Quoten zu Altersverteilung, Geschlechterverhältnis und Bildungsgrad zu verbinden.

Region 1 (100 Postleitzahlen)

Männlich / Weiblich
18-25 / 26-30 / 31-50 / 51-65
Ohne Studium / Mit Studium

Region 2 (100 Postleitzahlen)

Männlich / Weiblich
18-25 / 26-30 / 31-50 / 51-65
Ohne Studium / Mit Studium

Region 3 (100 Postleitzahlen)

Männlich / Weiblich
18-25 / 26-30 / 31-50 / 51-65
Ohne Studium / Mit Studium

Ich bin mir nicht sicher ob der folgende PHP Code richtig ist. Kann mir jemand hierbei helfen?

Vielen Dank im Vorraus :)

CODE

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

  '2-1' => 100, '2-2' => 100,  // Personen pro Geschlecht für die Regionengruppe 2
  '2-3' => 100, '2-4' => 100,  // Personen pro Bildungsabschluss für die Regionengruppe 2
  '2-5' => 100, '2-6' => 100,  // Personen pro Altersgruppe für die Regionengruppe 2
  '2-7' => 100, '2-8' => 100,  // Personen pro Altersgruppe für die Regionengruppe 2

  '3-1' => 100, '3-2' => 100,  // Personen pro Geschlecht für die Regionengruppe 3
  '3-3' => 100, '3-4' => 100,  // Personen pro Bildungsabschluss für die Regionengruppe 3
  '3-5' => 100, '3-6' => 100,  // Personen pro Altersgruppe für die Regionengruppe 3
  '3-7' => 100, '3-8' => 100,  // Personen pro Altersgruppe für die Regionengruppe 3
];

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

//Bildung wird umkodiert
$education = value('QU01');
if ($education = 'QU01_1' || 
    $education = 'QU01_2' || 
    $education = 'QU01_3' || 
    $education = 'QU01_4' || 
    $education = 'QU01_8' ||) {
  $educationGroup = 3;
} else {
  $educationGroup = 4;
}

//Alter wird kodiert
$age = value('QU01');
if ($age = 'QU01_1' || 
    $age = 'QU01_2' || 
    $age = 'QU01_3' ||  
    $age = 'QU01_8' ||) {
  $ageGroup = 5;
} elseif ($age = 'QU01_1' || 
    $age = 'QU01_2' || 
    $age = 'QU01_3' ||  
    $age = 'QU01_8' ||){
  $ageGroup = 6;
} elseif ($age = 'QU01_1' || 
    $age = 'QU01_2' || 
    $age = 'QU01_3' ||  
    $age = 'QU01_8' ||){
  $ageGroup = 7;
} elseif ($age = 'QU01_1' || 
    $age = 'QU01_2' || 
    $age = 'QU01_3' ||  
    $age = 'QU01_8' ||){
  $ageGroup = 8;
}

//Gruppen werden kodiert
$region = value('RI09');
if ($region = 20038 || 
    $region = 20088 || 
    $region = 20095 || 
    $region = 20097 || 
    $region = 20144 ||) {
  $regionGroup = 1;
} elseif ($region = 41812 ||
          $region = 41836 ||
          $region = 41844 ||
          $region = 41849 ||
          $region = 52062 ||) {
  $regionGroup = 2;
} elseif ($region = 01945 ||
          $region = 01968 ||
          $region = 01979 ||
          $region = 01983 ||
          $region = 01990 ||) {
  $regionGroup = 3;
}

// Definition einer Variable mit Region und Geschlecht
$demRegionGender = $regionGroup.'-'.$gender;
$demRegionAge = $regionGroup.'-'.$age;
$demRegionEducation = $regionGroup.'-'.$education;

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$cases = statistic('count', 'SD04_01', $demRegionGender);
$cases = statistic('count', 'SD04_01', $demRegionAge);
$cases = statistic('count', 'SD04_01', $demRegionEducation;
 
// Screenout
if (!array_key_exists($demRegionGender, $quota)) {
  redirect('https://www.panelanbieter.de/?xyz=screenoutGHIJKI&uid=%reference%');
}
if (!array_key_exists($demRegionAge, $quota)) {
  redirect('https://www.panelanbieter.de/?xyz=screenoutGHIJKI&uid=%reference%');
}
if (!array_key_exists($demRegionEducation, $quota)) {
  redirect('https://www.panelanbieter.de/?xyz=screenoutGHIJKI&uid=%reference%');
}
 
// Auslesen der Quote für die demografische Gruppe
$maxPerGroupGender = $quota[$demRegionGender];
$maxPerGroupAge = $quota[$demRegionAge];
$maxPerGroupEducation = $quota[$demRegionEducation];
 
// Quotenstopp
if ($cases >= $maxPerGroupGender) {
  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');
}
if ($cases >= $maxPerGroupAge) {
  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');
}
if ($cases >= $maxPerGroupEducation) {
  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');
}

1 Answer

0 votes
by SoSci Survey (304k points)

Ich würde empfehlen, dass Sie die Quoten nicht schon im Array verbinden (das macht es ziemlich komplex), sondern dass Sie weiterhin (wie in der Anleitung vorgeschlagen) ein Array pro demografischem Merkmal definieren. Und die drei Arrays definieren Sie abhängig von der Region der Person:

$region = value('RI09');

if (in_array($region, [20038, 20088, 20095, 20097, 20144])) {
  $quoteGeschlecht = ['1' => 100, '2' => 100];  // Personen pro Geschlecht für die
  $quoteBildung = ['1' => 100, '2' => 100];  // Personen pro Bildungsabschluss für die   '1-5' => 
  $quote Alter = [....
} elseif (in_array($region, [41812, ...])) {
  ...

Im Prinzip sollte auch hre Lösung funktionieren. Dann müssen Sie aber pro demografischem Kriterium einen anderen Namen für die Variable verwenden:

$casesG = statistic('count', 'SD04_01', $demRegionGender);
$casesA = statistic('count', 'SD04_01', $demRegionAge);
$casesE = statistic('count', 'SD04_01', $demRegionEducation;

Das gilt natürlich auch für die von mir empfohlene Lösung.

by s110744 (190 points)
Vielen Dank für die Antwort, die hat mir sehr weitergeholfen.

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

...