0 votes
in SoSci Survey (dt.) by s286377 (135 points)
closed by SoSci Survey

Hallo liebes Soscisurvey-team,

für eine Umfrage mit Quotierung für einige Merkmale habe ich versucht zwei interne Variablen anzulegen (SC03 und SC04), damit diese die gewählten Antwortoptionen zählen. Zu Beginn des Fragebogens auf Seite 3 scheint dies soweit auch zu funktionieren, wenn ich die Debug-Info korrekt verstehe.

PHP-Code Seite 3:

$gender = value('DE02');
$HO_frequency = value('SC01');
$work_hours = value('SC02');

// Das Alter umkodieren
$age = value('DE01_01');
if ($age >= 18 && $age <= 65) {
    $ageGroup = 1;
} else {
    $ageGroup = 2;
    html('<p>Redirect ausgelöst</p>');
    pageStop();
}

// Definition der Antworten und der counts für SC01
$HO_frequency_counts = [
    1 => 0,  // Nie
    2 => 0,  // Seltener als einmal alle 14 Tage
    3 => 0,  // Mindestens einmal alle 14 Tage
    -9 => 0  // Nicht beantwortet
];

// Überprüfen und Zählen der Antworten für SC01 (Screening_HO_FREQ)
if (in_array($HO_frequency, [1, 2, 3, -9])) {
    $HO_frequency_counts[$HO_frequency]++;
}

// Debugging: Display the counts after incrementing
foreach ($HO_frequency_counts as $key => $count) {
    html('<p>SC01 Count for option ' . $key . ': ' . $count . '</p>');
}

// Speichern der counts in internen Variablen
put('SC04_02', $HO_frequency_counts[1]); // Nie
put('SC04_03', $HO_frequency_counts[2]); // Seltener als einmal alle 14 Tage
put('SC04_04', $HO_frequency_counts[3]); // Mindestens einmal alle 14 Tage

// Überprüfen und Weiterleitung basierend auf den Bedingungen für SC01
if ($HO_frequency_counts[1] >= 200) {
    html('<p>Redirect ausgelöst für Option 1</p>');
    pageStop();
}

if ($HO_frequency_counts[3] >= 800) {
    html('<p>Redirect ausgelöst für Option 3</p>');
    pageStop();
}

// Definition der Antworten und der counts für DE02
$gender_counts = [
    1 => 0,  // Weiblich
    2 => 0,  // Männlich
    3 => 0,  // Divers
    4 => 0,  // Möchte ich nicht angeben
    5 => 0,  // Andere Angabe
    -9 => 0   // Nicht beantwortet
];

// Überprüfen und Zählen der Antworten für DE02 (Geschlecht)
if (in_array($gender, [1, 2, 3, 4, 5, -9])) {
    $gender_counts[$gender]++;
}

// Debugging: Counts anzeigen nach incrementing
foreach ($gender_counts as $key => $count) {
    html('<p>DE02 Count for option ' . $key . ': ' . $count . '</p>');
}

// Speichern der counts in internen Variablen
put('SC03_03', $gender_counts[1]); // Weiblich
put('SC03_04', $gender_counts[2]); // Männlich
put('SC03_05', $gender_counts[3]); // Divers
put('SC03_06', $gender_counts[4]); // Möchte ich nicht angeben
put('SC03_07', $gender_counts[5]); // Andere Angabe

// Überprüfen und Weiterleitung basierend auf den Bedingungen für Geschlecht
$quotaGender = [
    1 => 468,  // 468 weiblich (Code 1)
    2 => 532   // 532 männlich (Code 2)
];

$gender_count = statistic('count', 'SC03_03', $gender); // Anzahl der Fälle für Geschlecht
if (array_key_exists($gender, $quotaGender) && $gender_count >= $quotaGender[$gender]) {
    html('<p>Redirect ausgelöst</p>');
    pageStop();
}

// Weiterleitung für Personen, die Option 1 bei Frage SC02 gewählt haben
if ($work_hours == 1) {
    html('<p>Redirect ausgelöst</p>');
    pageStop();
}

Hier dazu die Debug-Info von Seite 3:

[Verarbeitung]	Lese Antworten von Seite 2
[Information]	Antwort auf DE01_01 = 22
[Information]	Antwort auf DE02 = 1
[Information]	Keine Antwort für DE02_05
[Information]	Antwort auf SC01 = 3
[Information]	Antwort auf SC02 = 2
[Information]	Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]	Erstelle Seite 3 in Fragebogen Name_Survey
[Information]	value("DE02") = 1
[Information]	value("SC01") = 3
[Information]	value("SC02") = 2
[Information]	value("DE01_01") = 22
[Information]	Die interne Variable SC04_02 wird mit dem Wert 0 belegt.
[Information]	Die interne Variable SC04_03 wird mit dem Wert 0 belegt.
[Information]	Die interne Variable SC04_04 wird mit dem Wert 1 belegt.
[Information]	Die interne Variable SC03_03 wird mit dem Wert 1 belegt.
[Information]	Die interne Variable SC03_04 wird mit dem Wert 0 belegt.
[Information]	Die interne Variable SC03_05 wird mit dem Wert 0 belegt.
[Information]	Die interne Variable SC03_06 wird mit dem Wert 0 belegt.
[Information]	Die interne Variable SC03_07 wird mit dem Wert 0 belegt.
[Inhalt]	Erstelle Frage DE13
[Inhalt]	Erstelle Frage DE03
[Inhalt]	Erstelle Frage DE04
[Inhalt]	Erstelle Frage DE05

Soweit scheint die Debug-Info zu den gewählten Antworten zu passen, denke ich?
Am Ende des Fragebogens habe ich folgenden Code stehen:

$gender = value('DE02');
$HO_frequency = value('SC01');
$work_hours = value('SC02');

// Das Alter wird umkodiert
$age = value('DE01_01');
if ($age >= 18 && $age <= 65) {
    $ageGroup = 1;
} else {
    $ageGroup = 2;
}

// Anzahl der Fälle für Geschlecht und Häufigkeit von HO abrufen
$gender_count_weiblich = statistic('count', 'SC03_03', 1); // Anzahl der Fälle für weiblich
$gender_count_männlich = statistic('count', 'SC03_04', 2); // Anzahl der Fälle für männlich
$gender_count_divers = statistic('count', 'SC03_05', 3); // Anzahl der Fälle für divers
$gender_count_möchte_nicht_angeben = statistic('count', 'SC03_06', 4); // Anzahl der Fälle für möchte nicht angeben
$gender_count_andere_angabe = statistic('count', 'SC03_07', 5); // Anzahl der Fälle für andere Angabe

$HO_frequency_count_never = statistic('count', 'SC04_02', 1); // Anzahl der Fälle für nie
$HO_frequency_count_seldom = statistic('count', 'SC04_03', 2); // Anzahl der Fälle für seltener als einmal alle 14 Tage
$HO_frequency_count_often = statistic('count', 'SC04_04', 3); // Anzahl der Fälle für mindestens einmal alle 14 Tage

// Debug
html('<p>Debug: DE02 Value: ' . $gender . '</p>');
html('<p>Debug: SC01 Value: ' . $HO_frequency . '</p>');

// Debug - counts anzeigen
html('<p>Debug: Gender Value: ' . $gender . '</p>');
html('<p>Debug: HO Frequency Value: ' . $HO_frequency . '</p>');
html('<p>Debug: SC03_03 Value: ' . value('SC03_03') . '</p>');
html('<p>Debug: SC04_02 Value: ' . value('SC04_02') . '</p>');
html('<p>Anzahl der Fälle für weiblich: ' . $gender_count_weiblich . '</p>');
html('<p>Anzahl der Fälle für männlich: ' . $gender_count_männlich . '</p>');
html('<p>Anzahl der Fälle für divers: ' . $gender_count_divers . '</p>');
html('<p>Anzahl der Fälle für möchte nicht angeben: ' . $gender_count_möchte_nicht_angeben . '</p>');
html('<p>Anzahl der Fälle für andere Angabe: ' . $gender_count_andere_angabe . '</p>');
html('<p>Anzahl der Fälle für nie: ' . $HO_frequency_count_never . '</p>');
html('<p>Anzahl der Fälle für seltener als einmal alle 14 Tage: ' . $HO_frequency_count_seldom . '</p>');
html('<p>Anzahl der Fälle für mindestens einmal alle 14 Tage: ' . $HO_frequency_count_often . '</p>');

// Complete-Redirect
// redirect('https://www.panelanbieter.de/?xyz=completeDEFGHI&uid=%reference%');

Hier zeigt mir SoScisurvey dann folgende Debug-Info an:

[Information]	value("DE02") = 1
[Information]	value("SC01") = 3
[Information]	value("SC02") = 2
[Information]	value("DE01_01") = 22
[Information]	value("SC03_03") = 1
[Information]	value("SC04_02") = 0
[Inhalt]	Erstelle Frage MC01

Es scheint also, als wären die Infos nicht korrekt auf den internen Variablen gespeichert bzw. nicht korrekt wieder abgerufen worden?

Über Hilfe hierzu wäre ich sehr danbkar!

Viele Grüße

closed with the note: Hier ist unklar, ob noch Fragen offen sind?
by SoSci Survey (316k points)
Mir ist nicht ganz nachvollziehbar, weshalb Sie auf Seite 1 das Geschlecht von einer nominalen Variable in 5 dichotome Variablen (SC03_03 bis SC03_07) umkodieren. Auch die Verwendung von statistic() am Ende des Fragebogens kann ich nicht nachvollziehen.

Wenn Sie eine reguläre Quotierung nach Alter und Geschlecht umsetzen möchten, wäre meine Empfehlung, dass Sie sich eher an den Code-Beispielen in der Anleitung orientieren.

> nicht korrekt wieder abgerufen worden?

Auf Seite 1 speichern Sie den Wert 1 in die interne Variable SC03_03, und genau dieser Wert wird am Ende auch wieder abgerufen/angezeigt. Aber Sie initialisieren die Variable $HO_frequency_counts in jedem Interview neu mit den Werten 0/0/0/0 ... und zählen dann an einer Stelle 1 dazu. Ich denke, das ist nicht, was Sie wollten, korrekt?

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

...