0 votes
in SoSci Survey (dt.) by s192889 (170 points)

Es handelt sich um zwei verschiedene Summen, also einmal von den Punktwerten der Fragen 1-16 und dann 17-19, die jeweils unterschiedliche Cut-offs haben (10/2,5), die wiederum beide zum Ausschluss führen sollen. Wie kann ich das codieren, dass zwei Summen gebildet und jeweils mit unterschiedlichen Bedingungen in die "if"-Struktur eingepflegt werden? Über dem Code steht nichts mehr btw.

related to an answer for: Der Code funktioniert nicht
by SoSci Survey (328k points)
Ich denke, die ersten beiden Zeilen waren schon korrekt - und für den IF-Filter habe ich Ihnen ja bereits eine Lösung geschickt. Ergänzen Sie Ihre Frage gerne nochmal um den aktuellen Code und erklären Sie, was funktioniert und was nicht.

Wenn es zwei unterschiedliche Summen sind, müssen Sie auch unterschiedliche Variablennamen dafür verwenden, also z.B. $sum1 und $sum2.
by s192889 (170 points)
Also, der aktuelle Code lautet:
$sum1 = valueSum('V008', '01-11');
$sum2 = valueSum('V008', '12-16');
if (
value ($sum1 >10) or
value ($sum2 >2.5)
) {
  goToPage('04');
}

Fehlermeldung:
Fehler im Fragebogen (Seite 3)
Für die Funktion value() wurde anstatt einer Frage- oder Item-Kennung ein Parameter vom Typ boolean angegeben: 1
Fehler im Fragebogen (Seite 3)
Für die Funktion value() wurde anstatt einer Frage- oder Item-Kennung ein Parameter vom Typ boolean angegeben: 1

Können Sie mir da noch mal bitte weiterhelfen?

1 Answer

0 votes
by SoSci Survey (328k points)

Das value() ist nur dafür da, Daten aus dem Datensatz zu holen - das haben Sie aber bereits mit valueSum() erledigt. Die Variable wird dann ohne weitere Funktion verwendet:

$sum1 = valueSum('V008', '01-11');
$sum2 = valueSum('V008', '12-16');
if (
  ($sum1 >10) or
  ($sum2 >2.5)
) {
  goToPage('04');
}

Oder nochmal kompakter:

$sum1 = valueSum('V008', '01-11');
$sum2 = valueSum('V008', '12-16');
if (($sum1 > 10) or ($sum2 > 2.5)) {
      goToPage('04');
}
by s192889 (170 points)
Ok, schon mal danke für diese Antwort. Jetzt habe ich das Problem, dass auch bei Eingabe von Werten, deren Summe unterhalb der if-clause-Bedingungen liegen müssten, trotzdem die "go-to-page"-Konsequenz folgt.
#Wir hatten schon überlegt, dass wir die Items umkodieren müssen, damit bei "0" als Minimum bei beschrifteten Zwischenwerten auch als "0" gerechnet wird, aber das hat auch nichts bewirkt.
Dann haben wir numerische Kodierung startend mit "0"  versucht, auch leider ohne Erfolg.
Hier nochmal der bisherige string:
$input = 'V202';
$output = 'V203';
$items = getItems($input, 'all');
foreach ($items as $item) {
  $orgCode = value(id($input, $item));
  if ($orgCode > 0) {
    $newCode = $orgCode - 1;
  } else {
    $newCode = $orgCode;
  }
  put(id($output, $item), $newCode);
}

$sum1 = valueSum('V202', '01-11');
$sum2 = valueSum('V202', '12-16');
if (($sum1 > 10) or ($sum2 > 2.5)) {
      goToPage('end');
}


Können Sie mir da nochmal bitte helfen?
Mit freundlichen Grüßen

BR
by SoSci Survey (328k points)
Die die Kodierung der Werte ab 1 ändert sich die Gesamtsumme ja konstant um +11 bzw. +5. Am einfachsten passen Sie die Werte entsprechend an:

if (($sum1 > 21) or ($sum2 > 7.5))

Oder (!) Sie subtrahieren die Konstanten direkt nach dem Summieren:

$sum1 = valueSum('V008', '01-11') - 11;
$sum2 = valueSum('V008', '12-16') - 5;
by s192889 (170 points)
edited by SoSci Survey
Ok, das hat jetzt geklappt, vielen Dank.

Für ein weiteres Testinstrument haben wir die gleiche Strategie angewandt, stoßen dort aber auf ein anderes Problem:
Es gibt für zwei Items statt vier (1=0/2=1/3=2/4=3) Antworten sechs, mit folgender Punktevergabe:
1=0, 2a=1, 2b=1, 3a=2, 3b=2, 4=3
Lässt sich das einpflegen, weil das ja der eigentlichen Logik von unterscheidbaren Antwortvariablen widerspricht?
Mit freundlichen Grüßen
by SoSci Survey (328k points)
Das Umkodieren können Sie mit einem Array erledigen. Sie würden valueSum() dann für die "normalen" Items verwenden und die anderen "manuell" mit ein paar Zeilen PHP-Code hinzuzählen.

$sum = valueSum(...

$recode = [1 => 0, 2 => 1, 3 => 1, 4 => 2, 5 => 2, 6 => 3];
$response = value('XY01_01');
if (array_key_exists($response, $recode)) {
    $sum+= $recode[$response];
}

So oder so ähnlich.

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

...