0 votes
in SoSci Survey (dt.) by s071843 (185 points)

Guten Tag,

wir möchten einen Survey gestalten, bei dem die Befragten zu einer oder mehreren Studien, die ihnen zugeordnet sind, eine Angabe machen sollen. (Auswahl plus Freitext)

Wie kann ich diese Platzhalter einbinden? Und wie kann damit umgegangen werden, dass manche Befragte nur eine Studie, andere mehrere haben?

Vielen Dank!

1 Answer

0 votes
by SoSci Survey (306k points)

Wenn Sie Adressdaten in SoSci Survey importieren, können Sie auch benutzerdefinierte Felder importieren. Wenn die Teilnehmer den Fragebogen dann via Serienmail starten, kann über die Funktion panelData() auf diese ANgaben zugegriffen werden.

In anderen Settings (z.B. Verwendung einer Seriennummer statt Serienmail) kann man mit der Datenbank für Inhalte arbeiten.

Und wie kann damit umgegangen werden, dass manche Befragte nur eine Studie, andere mehrere haben?

Das kommt sehr stark auf den konkreten Fall an. Im einfachsten Fall haben Sie jene Personen, die mehrere Fragebögen ausfüllen sollen, einfach mehrfach in die Serienmail-Adressliste importiert (Dubletten explizit erlauben beim Import) . Dann bekommen sie mehrere E-Mails mit mehreren Links und können den Fragebogen mehrfach ausfüllen.

by s071843 (185 points)
Vielen Dank. Wir werden die Variante mit Seriennummer nutzen. Entsprechend habe ich versucht eine Datenbank für Inhalte hochzuladen, die so hier aussieht:

Schlüssel     Sprache      0        1           2     3        4        5          Zeitstempel
xyz12345            eng        name email  id1  publ1    id2    publ2

Ich möchte zwei Funktionen nutzen.

1. Eine Frage soll alle Variablen anzeigen, die nicht leer sind (die Anzahl der ausgefüllten Spalten variiert stark zwischen den Teilnehmern). Die Teilnehmer sollen die Möglichkeit haben, die Eingabe anzupassen bzw. auszuwählen, dass keine Änderung nötig ist.

2. Manche Fragen sollen nur angezeigt werden, wenn eine bestimmte Bedingung erfüllt ist (Angabe von True/false in einer der Spalten).

Haben Sie hierfür vielleicht Beispiel-Codes? Ich habe versucht, Punkt 1 mit Beispiel 4 aus dem Hilfe-Artikel "Datenbank für Inhalte" zu lösen, bekomme jedoch immer Fehlermeldungen, zuallerst folgenden

There is no entry for the key Schlüssel in the contents' database.
by SoSci Survey (306k points)
Wenn Sie Seriennummern nutzen, dann können Sie die Daten wie folgt abrufen:

$serial = caseSerial();
$data = dbGet($serial);

Um nun den Namen und E-Mail aus Spalte 0 und 1 als Antwortvorgabe für AB01_01 und AB01_02 zu setzen, verwenden Sie preset():

if ($data) {
  preset('AB01_01', $data[0]);
  preset('AB01_02', $data[1]);
}

Mit IF-Filtern (s. Anleitung zu PHP-Filtern) können Sie das auch noch an Bedingungen knüpfen. Das IF hier ist nur für den Fall gesetzt, dass kein Datenbankeintrage gefunden wird und $data leer ist (NULL).
by s071843 (185 points)
Vielen Dank.

Mit dem oben angegeben Code bekomme ich nach wie vor eine Fehlermeldung für den Datenbankschlüssel: An invalid database key was specified for dbGet()

In meiner csv-Datei habe ich die Spalte caseSerial benannt, beim Importieren wähle ich immer aus, dass die oberste Zeile nur  Beschriftungen enthält, aber diese werden dann ja ersetzt durch die oben angegebenen (Schlüssel, 0, 1, 2, etc.).
by SoSci Survey (306k points)
Haben Sie denn die SERIALs in Ihrer CSV-Liste stehen, die Sie importieren? Als erste Spalte - und wird das in der "Datenbank für Inhalte" dann auch als Schlüssle angezeigt? Haben Sie beim Testen mittels ?s=... eine SERIAL an den Fragebogen übergeben, damit der Fragebogen Daten finden kann?
by s071843 (185 points)
Zu den ersten Fragen: ja. Allerdings hatte ich den Fragebogen noch nicht aktiv, sondern hab immer nur direkt getestet oder einen Pretest-Link genutzt.

Nach Freischaltung und Nutzung der ersten Seriennummer aus meiner Datenbank (für die es einen passenden Eintrag gibt), erscheint die Frage im Fragebogen ganz unverändert ohne Ausgabe der Variable.

Eingegeben bei der Fragebogenerstellung habe ich das wie folgt:

question('P101');   // earliest results publication

$serial = caseSerial();
$data = dbGet($serial);


if ($data) {
  preset('p101_01', $data[2]);
  preset('p101_02', $data[4]);
}
by SoSci Survey (306k points)
Sie können an einen Pretest-Link auch einfach &s=... anhängen, um eine SERIAL an den Fragebogen zu übergeben.

> erscheint die Frage im Fragebogen ganz unverändert ohne Ausgabe der Variable.

Testen Sie das Ganze bitte im Debug-Modus (mit angehängter SERIAL) und berichten Sie kurz, was die Debug-Information (rechts oben) sagt.

Achten Sie bei den Variablennamen im preset() bitte auch auf die Groß-/Kleinschreibung.
by s071843 (185 points)
Im Debug-Modus mit angehängter Seriennummer bekomme ich nun folgende Fehlermeldung:

The variable AB01_01 used with the function preset() is invalid in this project. (auch für AB02_01 bzw. wie oben angegeben p101_01 und P101_02).

In der Debug-Information steht Folgendes:

[Information]    Interview started (new case no. 68)
[Information]    Questionnaire xyz from project xyz will be used
[Processing]    Create page 2 in questionnaire xyz
[Content]    Create question P101
by SoSci Survey (306k points)
Prüfen Sie bitte in der Variablen-Übersicht bzw. in der Frage P101 unter "Variablen" wie die Variablen zu dieser Frage korrekt heißen.
by s071843 (185 points)
Ok, jetzt kommt immerhin keine Fehlermeldung mehr. War v.a. ein Problem mit Groß- und Kleinschreibung. Angezeigt werden die Variablen aber dennoch nicht. Die Debug-Information ist dieselbe wie oben.
by SoSci Survey (306k points)
Haben Sie den PHP-Code auf derselben Fragebogen-Seite über (!) die Frage gestellt? Das preset() muss (auf der gleichen Seite) aufgerufen werden, bevor die Frage angezeigt wird.
by s071843 (185 points)
Hatte ich nicht. Jetzt habe ich es so umgestellt:

$serial = caseSerial();
$data = dbGet($serial);


if ($data) {
  preset('P101', $data[2]);
  preset('P101_02', $data[4]);

}

question('P101');   // earliest results publication

Die Variablen werden aber dennoch nicht angezeigt.
by SoSci Survey (306k points)
Dann ergänzen Sie bitte noch folgende Zeilen PHP-Code und prüfen Sie, ob die Daten korrekt gefunden werden:

debug($data);
debug($data[2]);
debug($data[4]);

Bitte posten Sie die Debug-Information, die Sie erhalten und den Auszug zu P101 aus der Variablen-Übersicht.
by s071843 (185 points)
Vielen Dank, Anzeige funktioniert jetzt (war noch ein Fehler in der Variablenbezeichnung).

Die zweite Funktion, bei der ich nicht weiterkomme, sind die Filter. Ähnlich wie bisher sind dafür in der Datenbank für Inhalte Spalten vorgesehen, die abgefragt werden sollen und z.B. FALSE sein sollen. Nur dann soll wie im Beispiel vorher die Variable links davon im Fragebogen angezeigt werden. Wenn bei einem Befragten in keiner der abgefragten Spalten FALSE steht, soll die Frage übersprungen werden.

Also für die Datenbank, wie sie oben mit den Spaltenüberschriften angegeben ist, soll [2] angezeigt werden, wenn [3] = FALSE ist und [4] wenn [5] FALSE ist. Können Sie hierzu noch Tipps geben?
by SoSci Survey (306k points)
Ich bin nicht ganz sicher, ob ich die Frage korrekt verstehe...

Es würde definitiv helfen, wenn Sie die Ausgabe zu debug($data); posten.

Hier ein Versuch, Ihre Frage zu interpretieren:

if ($data[3] == 'FALSE') {
  $value = $data[2];
} else {
  $value = $data[4];
}
debug($value);
by s071843 (185 points)
Die Debug-Informationen zu meiner ersten Frage waren zuletzt folgende:

Debug information for $data:
0email, 1name, 2id1, 3TRUE, 4, 5
Notice (page 2)
Debug information for $data[2]:
$data[2] = NCT01605487: 10.2340/00015555-2150 (corresponding) (string)
Notice (page 2)
Debug information for $data[4]:
$data[4] = (string)

Unter der Frage wird dann inzwischen korrekt die Variable [2] bzw. [4] ausgegeben.
by s071843 (185 points)
Meine zweite Frage sieht aktuell so aus:

$serial = caseSerial();
$data = dbGet($serial);

if ($data[3] == 'FALSE') {
  $value = $data[2];
}
elseif ($data[5] == 'FALSE') {
  $value = $data[4];
}
else {
  question('P103');
}


debug($value);

question('P112');   // results publication overlooked

D.h. falls 3 oder 5 FALSE sind, soll jeweils die passende Variable ausgegeben werden, ansonsten soll die Frage übersprungen werden.

Die Debug-Info gibt für value den Wert aus, den ich gern im Survey angezeigt haben möchte (genau wie in der ersten Frage), allerdings wird sie aktuell nicht angezeigt. Wie füge ich das in die Bedingungsschleife ein?
by SoSci Survey (306k points)
edited by SoSci Survey
Gut ... die Datenbank für Inhalte interpretiert alles (also auch FALSE und TRUE) zunächst als String - insofern sollten die Filter dann korrekt arbeiten.

> ansonsten soll die Frage übersprungen werden.

Ihr Code zeigt aktuell eine Frage (P103), wenn nicht eine der beiden Spalten "FALSE" ist.
by s071843 (185 points)
Und wie bekomme ich es nun hin, dass der entsprechende Wert im Fragebogen dargestellt wird? Bei der folgenden Variante bekomme ich nun die Fehlermeldung in der Debug-Information: Debug information for $value:
No data (null)

$serial = caseSerial();
$data = dbGet($serial);

if ($data[3] == 'FALSE') {
  $value = preset('P112', $data[2]);
}
elseif ($data[5] == 'FALSE') {
  $value = preset('P112', $data[4]);
}
else {
  question('P103');
}


debug($value);

question('P112');   // results publication overlooked
by SoSci Survey (306k points)
> Und wie bekomme ich es nun hin, dass der entsprechende Wert im Fragebogen dargestellt wird?

Sie verwenden aktuell preset() - stellen also lediglich die Antwort für P112 ein. Das $value= können Sie dann weglassen.

Ergänzen Sie aber zur Kontrolle, was da passiert, ein paar debug()s:

$serial = caseSerial();
$data = dbGet($serial);

debug($data);
if ($data[3] == 'FALSE') {
  debug($data[2]);
  $value = preset('P112', $data[2]);
}
elseif ($data[5] == 'FALSE') {
  debug($data[4]);
  $value = preset('P112', $data[4]);
}
else {
  // Wollten sie vielleicht das hier?
  goToPage('next');
}

question('P112');   // results publication overlooked
by s071843 (185 points)
Vielen Dank!
Nachdem ich die Variablenbezeichnung angepasst habe (P112_01 bzw. P112_02) werden die Variablen nun auch im Surveyformular angezeigt.

Bisher waren hier mehrere Fragen auf einer Seite, daher hatte ich direkt auf die nächste Frage verwiesen, allerdings erschien diese dann doppelt, also werde ich die Fragen trennen und wie von Ihnen vorgeschlagen auf die nächste Seite springen.
by SoSci Survey (306k points)
Nachdem es offenbar um unterschiedliche Variablen geht: Vielleicht möchten Sie statt ELSEIF nur IF schreiben. Sonst kann nur eine der beiden Variablen gesetzt werden.

> Bisher waren hier mehrere Fragen auf einer Seite, daher hatte ich direkt auf die nächste Frage verwiesen

Das funktioniert dann aber vermutlich nicht so, wie Sie geplant haben. question() zeigt eine Frage an. goToPage() springt zu einer anderen Seite.
by s071843 (185 points)
Wenn ich elseif nutze, wird im Survey nur die erste der Variablen angezeigt. Wenn ich allerdings statt elseif if nehme, wird die Frage übersprungen (obwohl im getesteten Datensatz zwei passende Variablen vorkommen).

Aktuell sieht der Code so aus:

$serial = caseSerial();
$data = dbGet($serial);

debug($data);
if ($data[3] == 'FALSE') {
  debug($data[2]);
  $value = preset('P112_01a', $data[2]);
}
if ($data[5] == 'FALSE') {
  debug($data[4]);
  $value = preset('P112_02a', $data[4]);
}

//(etc. es sind insgesamt bis zu 11 Variablen, die in der Freitextausgabe der Fragenoption "Mehrfachauswahl" angezeigt werden können)

else {
     goToPage('next');
}

question('P112');   // results publication overlooked
by SoSci Survey (306k points)
Ja, das goToPage() müssten Sie dann nochmal etwas anders filtern. Beziehungsweise ... vielleicht möchten Sie es wie folgt machen:

if ($data[3] == 'FALSE') {
  $value = preset('P112_01a', $data[2]);
}
if ($data[5] == 'FALSE') {
  debug($data[4]);
}
if (($data[3] == 'FALSE') || ($data[5] == 'FALSE')) {
  question('P112');   // results publication overlooked
}
by s071843 (185 points)
Vielen Dank, jetzt funktioniert es!

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

...