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

0 votes

Hallo,
Ich habe zwei Fragen zum Filtern:

Frage 1: Ich würde gerne aufgrund von einer offenen Texteingabe filtern:
Bis jetzt sieht der Code so aus:

  if (
       strtolower(value('DE01_01')
      ) == 'psychologie') {
 question('DE02'); question('DE03');
}

Allerdings möchte ich, dass auch Personen, die Psychologie evtl. falsch schreiben, erfasst werden. Dazu würde ich gerne nur nach den ersten Buschstaben also ‚psych‘ filtern. Wie geht das?

Frage 2:
Der Fragebogen soll für ein Screening verwendet werden. Am Ende sollen alle, die die Kriterien erfüllen, ihre Mailadresse angeben, der Rest bekommt eine entsprechende Absage.
Hauptproblem: Ich verwende sozusagen geschachtelte Filter. Zunächst wird z.B. gefragt ob eine Person eine Brille trägt (z.B. ‚SE01‘): Falls ja, wird nach der Dioptrie(z.B. ‚SE03‘) gefragt.
Ganz am Ende sollen nur Personen ausgeschlossen werden, für die SE03 > 3 oder SE03 >2 gilt.
Wenn ich im Filter nur mit value(‚SE03‘) arbeite, kommt zu Recht die Fehlermeldung, dass es keinen Wert für SE03 gibt (diese Frage wird ja schließlich auch nur von Brillenträgern beantwortet)
Wie kann ich das umgehen? Ich habe es auch mit einer Verknüpfung (s.u.) von Bedingungen versucht, aber auch hier kommt die Fehlermeldung, dass SE03 keinen Wert hat.

if (
   (value('SE01') == '1') and
   (value('SE03') == '2') or (value('SE03') == '3')
) {
  question('SE04');
}

Wie kann ich das umgehen? (Das Problem gilt für viele Variablen/Items, für die am Ende gefiltert werden soll)

in SoSci Survey (dt.) by s072016 (130 points)

1 Answer

0 votes

Mit der PHP-Funktion substr() können Sie einen Teil aus einem String extrahieren

if (substr(strtolower(value('DE01_01')), 0, 5) == 'psych') {
  question('DE02');
  question('DE03');
}

... oder Sie suchen nach Teiltreffern

if (strpos(strtolower(value('DE01_01')), 'psych') !== false) {
  question('DE02');
  question('DE03');
}

Die doppelten Gleichheitszeichen nach dem Ausrufezeichen sind hier wichtig (!==).

Damit lassen sich viele schöne String-Prüfungen bauen. Allerdings wäre es vielleicht sinnvoller, eine "Texteingabe mit Auswahlempfehlung" zu verwenden. Dort werden vorgegeben Antworten automatisch angeboten und kodiert.

Ich habe es auch mit einer Verknüpfung (s.u.) von Bedingungen versucht, aber auch hier kommt die Fehlermeldung, dass SE03 keinen Wert hat.

Das kommt daher, dass Sie nicht genug Klammern verwenden :) Wenn Sie die or-Bedingung nochmal klammern, wird sie nicht mehr ausgeführt.

if (
   (value('SE01') == 1) and
   ((value('SE03') == 2) or (value('SE03') == 3))
) {
  question('SE04');
}

Wenn man es lieber noch etwas klarer haben will, kann man die Bedingungen auch schachteln.

if (value('SE01') == 1) {
  if ((value('SE03') == 2) or (value('SE03') == 3)) {
    question('SE04');
  }
}

Und als dritte Option kann man die Warnung ignorieren. Es ist nur eine Warnung, dass man womöglich etwas falsch gemacht haben könnte. Die Teilnehmer werden die Warnung nicht sehen...

by SoSci Survey (76.3k points)
...