0 votes
in SoSci Survey (dt.) by s190091 (270 points)
edited by SoSci Survey

Liebes SoSci-Team,

ich versuche gerade aus einer sichtbaren Variable UD01_xx eine interne Variable UD02_xx zu bilden. Die sichtbare Variable UD01_xx nimmt die Werte 1 (nicht ausgewählt) oder 2 (ausgewählt) an. Die interne Variable UD02_xx soll ebenfalls den Wert 1 annehmen, falls UD01_xx den Wert 1 hat. Falls UD01_xx den Wert 2 hat, soll jedoch die interne Variable UD02_xx den Wert 0 annehmen.

Ich habe, basierend auf einer früheren Antwort im Support, den Sie an einen anderen Fragesteller geschickt haben, folgende Befehle eingegeben:

$input1 = 'UD01';
$output1 = 'UD02';
// Liste aller Items erstellen
$items1 = getItems($input1, '>=', 1);
foreach ($items1 as $item) {
  // id() baut aus einer Fragekennung (UD01) und der Item-Nummer (z.B. 1) eine Item-Kennung (UD01_01)
  // value() liest den Antwortcode aus
  $orgCode = value(id($input1, $item));
  // Nur bejahende Antworten umkodieren, d.h. auf null setzen
  if ($orgCode = 2) {
    // Subtrahieren von 2
    $newCode = $orgCode - 2;
  }
  else {
    // Andere Codes beibehalten 
    $newCode = $orgCode;
  }
  // put() speichert den Wert in einer internen Variable
  put(id($output1, $item), $newCode);
}

Das Problem ist nun, dass in der neuen Variable korrekterweise statt einer 2 eine 0 auftaucht, aber die Werte 1 nicht übernommen werden - da taucht nun ebenfalls eine 0 auf. Leider kann ich meinen Fehler nicht finden.

Ein weiteres Problem ist, dass die Antwortcodes bei den internen Variablen in Excel als Text und nicht als Zahlen angezeigt werden und ich nicht weiß, wie ich das ändern kann.

Vielen Dank für Ihre Unterstützung und beste Grüße

by SoSci Survey (327k points)
> aber die Werte 1 nicht übernommen werden

Der Code sieht auf den ersten Blick korrekt aus.

Könnten sie bitte wie folgt ein `debug()`ergänzen:

    $items1 = getItems($input1, '>=', 1);
    debug($items1);

Und könnten sie dann bitte mal die komplette Debug-Information der Seite posten (also das, was rechts oben aufgeklappt werden kann)? Danke.
by s190091 (270 points)
Herzlichen Dank für Ihre schnelle Rückmeldung - hier ist die erbetene Debug-Information:

[Information]    Interview Nummer 147 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt testdozenten wird verwendet
[Information]    Die Verweildauer auf Seite 2 war 4 Sekunden
[Verarbeitung]    Lese Antworten von Seite 2
[Information]    Antwort auf UD01_01 = 1
[Information]    Antwort auf UD01_08 = 2
[Information]    Antwort auf UD01_17 = 1
[Information]    Antwort auf UD01_14 = 1
[Information]    Antwort auf UD01_10 = 1
[Information]    Antwort auf UD01_09 = 1
[Information]    Antwort auf UD01_02 = 1
[Information]    Antwort auf UD01 = 1
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 3 in Fragebogen base
debug()    Inhalt: 0:1, 1:2, 2:8, 3:9, 4:10, 5:14, 6:17
[Information]    value("UD01_01") = 1
[Information]    Die interne Variable UD02_01 wird mit dem Wert 0 belegt.
[Information]    value("UD01_02") = 1
[Information]    Die interne Variable UD02_02 wird mit dem Wert 0 belegt.
[Information]    value("UD01_08") = 2
[Information]    Die interne Variable UD02_08 wird mit dem Wert 0 belegt.
[Information]    value("UD01_09") = 1
[Information]    Die interne Variable UD02_09 wird mit dem Wert 0 belegt.
[Information]    value("UD01_10") = 1
[Information]    Die interne Variable UD02_10 wird mit dem Wert 0 belegt.
[Information]    value("UD01_14") = 1
[Information]    Die interne Variable UD02_14 wird mit dem Wert 0 belegt.
[Information]    value("UD01_17") = 1
[Information]    Die interne Variable UD02_17 wird mit dem Wert 0 belegt.
[Inhalt]    Erstelle Frage TD01

1 Answer

0 votes
by SoSci Survey (327k points)

Danke für die Debug-Information. Das engte den Fehler sehr eng auf den IF-Filter ein. Und siehe da, ich habe beim ersten Durchsehen einen Klassiker übersehen:

if ($orgCode = 2) {

Korrekt müssten es zwei Gleichheitszeichen sein:

if ($orgCode == 2) {

Denn das einfache Gleichheitszeichen setzt den Wert einer Variable, nur das doppelte vergleicht.

by s190091 (270 points)
Herzlichen Dank für Ihre Rückmeldung! Kleine Ursache, große Wirkung - jetzt klappt es.

Nur ein kleines Problem bleibt noch: Die gebildeten internen Variablen werden in Excel als Text exportiert - wie kann ich dafür sorgen, dass sie direkt als Zahl exportiert werden?
by SoSci Survey (327k points)
Wenn Sie die interne Variable (nicht nur die Frage, sondern direkt die Variable/Item) im Fragenkatalog anklicken: Ist da schon ausgewählt, dass es eine Zahl sein soll?

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

...