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

Kann ich die interne Variable denn noch nachträglich anlegen? Ich habe 12 Items mit insgesamt zwölf Teilfragen (Beste Lösung/schlechteste Lösung)
Ich hab mir die Anleitung angeschaut, weiß aber einfach nicht wie ich es zuordnen soll. Langsam bin ich mit meinem Latein am Ende

related to an answer for: Richtige Eingabe der Codes?
in SoSci Survey (dt.) by s085041 (225 points)
Ich bin nun irgendwie total irritiert. Ich möchte doch nur, dass ich alle Daten beim Import vollständig sind. Ich dachte, ich wäre durch damit. Das Prinzip mit den internen Variablen versteh ich nun wirklich nicht, weil ich ja quasi angegeben habe, welches Item wieviel Punkte erhält. Mir ist bewusst, dass put dafür Sorgen soll alle Daten zu speichern, ich weiß nur nicht wie ich das gerade hinbekommen soll, wenn ich alles schon erstellt habe.

$fragen = [
'TF01' => [1 => 1, 2 => 0, 3 => 0, 4 => -1],   
'TF02' => [1 => -1, 2 => 0, 3 => 0, 4 => 1]
];

$points = 0;
 

foreach ($fragen as $variable => $values) {
  $answer = value($variable);
  if (isset($values[$answer])) {
    $points += $values[$answer];
  }
}
> Das Prinzip mit den internen Variablen versteh ich nun wirklich nicht

Eine interne Variable ist eine (zusätzliche) Spalte im Datensatz.

1 Answer

0 votes
 
Best answer

Ich habe jetzt 12 interne variablen für 24 Teilfragen angelegt.
von IV01_01 bis IV01_02.
Wäre das dann jetzt so korrekt?

$fragen = [ 'TF01' => [1 => 1, 2 => 0, 3 => 0, 4 => -1], 'TF02' => [1 => -1, 2 => 0, 3 => 0, 4 => 1] ];

$points = 0;

foreach ($fragen as $variable => $values) {
$answer = value($variable);
if (isset($values[$answer])) {

$points += $values[$answer];

}
}

put('IV01_01', $points);

Heißt es, dass ich dann die jeweiligen Punkte der ersten beiden Teilfragen von den Teilnehmern bei SPSS dann unter der Spalte IV01_01 sehe?

by s085041 (225 points)
selected by s085041
> Ich habe jetzt 12 interne variablen für 24 Teilfragen angelegt.

Nein, wenn Sie nur einen Punktwert ermitteln, benötigen Sie auch nur eine interne Variable (=Spalte im Datensatz).
Ah ok, das heißt, dass ich für alle weiteren Teilfragen wie TF03/TF04; TF05/TF06 usw. auch
put('IV01_01', $points); angeben muss, damit mir die Ergebnisse der 12 Items zum Konstrukt Teamfähigkeit angezeigt werden? Man kann pro Item -2 bis +2 Punkte erzielen, daher bin ich von ausgegangen, dass es insgesamt 12 Punktwerte gibt und dementsprechend 12 interne Variablen angelegt werden müssen, um die jeweiligen Punktwerte der Items angezeigt zu bekommen und zu speichern.
Danke für Ihre mühe. Ich hab das bisher einfach noch nicht gemacht
Zudem möchte ich das die Werte pro Items  in SPSS angezeigt werden, damit ich  cronbachs alpha prüfen kann. Daher hab ich 12 PHP Tabellen für insgesamt 24 Teilfragen angelegt ( 2 Teilfragen pro Item). Ich dachte, dass ich mit den internen Variablen TV01_01 bis TV01_12 dann die jeweiligen Werte pro Item gespeichert werden.
Wenn ich alle Fragen in eine PHP Tabelle untereinander aufführe, macht es Sinn, dass ich nur eine interne Variable habe, da er alle Punkte addiert.
Ich weiß, dass ist mit Sicherheit eine doofe Frage, aber werden mir mit einer internen Variable auch alle Punkte für die jeweiligen Items angezeigt?
In einer Variable können Sie nur einen Wert speichern - also in Ihrem Fall nur die Summe.

Wenn Sie die Punkte pro Frage (Item) speichern möchten, dann müssten Sie das an der Stelle machen, wo Sie mittels $values[$answer] den Punktwert für die Frage ermitteln.

Legen Sie eine zusätzliche Liste an, wohin welcher Punktwert gespeichert werden soll, z.B.

$save = [
  'TF01' => 'IV01_02',
  'TF02' => 'IV01_03',
  // u.s.w.
];

Und an der beschrieben Stelle ergänzen Sie dann wie folgt:

$points += $values[$answer];
put($save[$variable], $values[$answer]);
Dann müsste ich ja doch 24 interne Variablen anlegen? So wie sie das formuliert haben, wird eine Teilfrage einer internen Variable zugeordnet. Ginge es nicht auch so?

$save = [
  'TF01' => 'IV01_01',
  'TF02' => 'IV01_01',
  'TF03' => 'IV01_02',
  'TF04' => 'IV01_02',   

bis

  'TF23' => 'IV01_12',
  'TF24' => 'IV01_12',

Damit hätte ich die Summe der Teilfragen in einem Item oder?

Falls ich das so umsetzten kann, kann ich Ihnen das erneut zusenden? Ich wüsste sonst nicht wen ich fragen könnte. Das ganze hier macht mir echt zu schaffen :D
> Dann müsste ich ja doch 24 interne Variablen anlegen?

Ja, dann schon - und nein, wenn Sie die Variablennamen doppelt vergeben, dann überschreiben Sie den Inhalt und haben immer nur das zweite Ergebnis gespeichert.

> Das ganze hier macht mir echt zu schaffen :D

Tja, ich habe nicht behauptet, dass Programmierung einfach ist ;)

Aber Herausforderungen gehören zur Wissenschaft nunmal dazu. Sonst wäre es ja langweilig. Eperimentieren Sie mal ein wenig mit dem PHP-Code und versuchen Sie, die Funktion nachzuvollziehen. Keine Sorge: Das kann man später immer brauchen. Kein Witz.
Ja und ich werde auch nicht locker lassen. Das heißt auch für Sie, dass ich Sie nun weiterhin nerven muss :D.
Als ich diesen PHP Code

html('<p>Sie haben '.$points.' Punkte erzielt.</p>' in eine Fenster eingefügt habe, in der jeweils nur die Punkte von 2 Teilfragen gezählt wurde sind, hat er auch nur tatsächlich nur die Punkte für ein Item angezeigt.
Dachte das würde mir den internen Variablen ebenso funkionieren. Also 12 PHP Fenster anlegen. Im ersten Fenster der Teilfragen (TF01/TF02) wird dieser code angewendet

put('IV01_01', $points);

Im nächsten Fenster würde ich dann die anderen zwei Teilfragen programmieren und diesen Code angeben

put('IV01_02', $points);

Damit hätte ich dann 12 statt 24 interne Variablen. Geht das nicht auch??

Wenn nicht, mache ich es so, wie Sie es gesagt haben
Doch, das geht auch. Ist nicht besonders elegant, funktioniert aber :)
Ja, das ist wirklich nicht elegant :D. Dennoch hab ich damit 12 interne Variablen, statt 24 interne Variablen. Ist das denn jetzt so vollständig?



$fragen = [
'TF01' => [1 => 1, 2 => 0, 3 => 0, 4 => -1],   
'TF02' => [1 => -1, 2 => 0, 3 => 0, 4 => 1]
];

$points = 0;
 

foreach ($fragen as $variable => $values) {
  $answer = value($variable);
  if (isset($values[$answer])) {
    $points += $values[$answer];
  }
}
 
html('<p>Sie haben '.$points.' Punkte erzielt.</p>');
put('IV01_01', $points);

Das selbe Prinzip hab ich nun mit den folgenden Teilfragen auch gemacht.

Die Punktewerte wurden festgelegt. Sie werden gezählt und nun auch mit einer zusätzlichen Spalte im Datensatz gespeichert, oder?
Damit wäre doch alles vollständig?

Auf diesem Wege muss ich sagen, dass Sie alle echt super sind.
Ja, sieht gut aus. Das html() können Sie natürlich noch weglassen. Und Sie sollten noch ein-, zweimal durchtesten, ob alles passt. Aber ansonsten...

Hier noch, wie es eleganter aussieht:

$fragen = [
  'IV01_01' => [
    'TF01' => [1 => 1, 2 => 0, 3 => 0, 4 => -1],   
    'TF02' => [1 => -1, 2 => 0, 3 => 0, 4 => 1]
  ],
  'IV01_02' => [
    'TF03' => [1 => 1, 2 => 0, 3 => 0, 4 => -1],   
    'TF04' => [1 => -1, 2 => 0, 3 => 0, 4 => 1]
  ],
  // u.s.w.
];

$sum = 0;
foreach ($fragen as $intVar => $set) {
  $points = 0;
  foreach ($set as $variable => $values) {
    $answer = value($variable);
    if (isset($values[$answer])) {
      $points += $values[$answer];
    }
  }
  put($intVar, $points);
  $sum+= $points;
}
// Die Gesamtsumme speichern wir auch gleich noch
put('IV01_13', $sum);

Dann haben Sie alle 12+1 Variablen mit einem einzigen PHP-Code berechnet.

> Auf diesem Wege muss ich sagen, dass Sie alle echt super sind.

Danke :)
Ich hab Ihren Tipp jetzt übernommen, leider zeigt er mir diesen Fehler an

There is an error in the PHP code:
Questionnaire Error: Command or string (text) unfinished

A command, e.g. question() is missing a semicolon or
a string (text in quotation marks) is unclosed or
the string itself contains an apostrophe, e.g. html('Let's do it!'); – if the latter is the case, please type in a backslash (\) first.
Perhaps the opening and closing braces for the statement blocks are mismatched.
PHP code

047  ],
048  'IV01_12' => [
049  'TF23' => [1 => 0, 2 => 1, 3 => -1, 4 => 0],   
050  'TF24' => [1 => 0, 2 => -1, 3 => 1, 4 => 0]
051 ];
052
053 $sum = 0;
054 foreach ($fragen as $intVar => $set) {

Das Problem liegt wohl bei Zeile 050 und 051.
Ich erkenne den Fehler nicht. Sehen Sie woran das liegt?
Ja, vor Zeile 51 fehlt noch eine eckige Klammer. Sie haben hier verschachtelte Arrays: In dem Array $fragen stecken ihrerseits Arrays, die wiederum Arrays enthalten. Also müssen am Ende drei eckige Klammern geschlossen werden.
Ich habe jetzt eine eckige Klammer hinzugefügt, ohne Komma oder Semikolon. War das so gemeint? Da wäre ich nicht drauf gekommen. Er zeigt mir auf jeden Fall keinen Fehler mehr an

],
'IV01_12' => [
'TF23' => [1 => 0, 2 => 1, 3 => -1, 4 => 0],   
'TF24' => [1 => 0, 2 => -1, 3 => 1, 4 => 0]
]
];

$sum = 0;
foreach ($fragen as $intVar => $set) {
  $points = 0;
Wenn Sie die Inhalte innerhalb der Klammer mit Leerzeichen einrücken, dann wird die Struktur klarer.
Ich hab Ihren PHP Code übernommen.

Ich habe zusätzlich html('<p>Sie haben '.$points.' Punkte erzielt.</p>');eingefügt, um zu schauen, ob er die Punktewerte richtig anzeigt. Mit diesem Code funktioniert das aber nicht. Ich vermute, dass er die Punktewerte überschreibt. Am Ende hat er nur 2 Punkte gezählt. Denke das funktioniert mit dem PHP Code in Kombination wahrscheinlich nicht oder?
Ja ich werde das nochmals einrücken. Meine Frage war, ob vor Zeile 51 nur eine eckige Klammer kommt oder eine eckige Klammer mit Komma ( ],)?
Nach Abschluss dieses Elements kommt kein weiteres im (äußeren) Array, deshalb eigentlich kein Komma. PHP ignoriert aber überflüssige Kommata am Ende von Arrays - insofern stört es auch nicht.

> Denke das funktioniert mit dem PHP Code in Kombination wahrscheinlich nicht oder?

Der PHP-Code zähle auf einen Rutsch alle Teilfragen aus. Sie müssten also etwas weiter oben etwas einfügen:

  put($intVar, $points);
  html('<p>Es wurden für '.$intVar.' '.$points.' Punkte erzielt.</p>');
  $sum+= $points;

Diese Information sehen Sie aber auch, wenn Sie rechts oben einfach die Debug-Information aufklappen: https://www.soscisurvey.de/help/doku.php/de:create:debugging
ahhh Danke, das vereinfacht einiges
...