0 votes
in SoSci Survey (dt.) by s222544 (565 points)
edited by SoSci Survey

Hallo SoSci Survey Online Support Team,

vielen Dank für Ihre bisherige Hilfe in meinem Projekt!

In meiner Umfragen sollen die Probanden im ersten Schritt ein Portfolio erstellen, im zweiten bekommen sie Renditeveränderungen angezeigt und im dritten Schritt wird die Veränderung in der Gewichtung angezeigt.

Ich habe derzeit Probleme beim Anzeigen der Veränderungen in der Gewichtung.

Als Beispiel:
1) Eine frei verfügbare Summe zum Anlegen wird als Text angezeigt.
2) Es gibt vier verschiedene Kategorien in denen angelegt werden kann. Der Proband soll mittels Text-Eingabefeld und Antwortprüfung die Summe von 100 Prozent verteilen - gespeichert in TE01_01 bis _04.
3) Die Rendite aller vier Kategorien wird angezeigt, gespeichert als interne Variable EX04_01 bis EX04_04
4) Die veränderte Gewichtung soll angezeigt werden.

Die veränderte Gewichtung wird wie folgt berechnet:

Beispiel: Angelegte Summe €25.000
Gewichtung: 50%, 10%, 30%,10%
Rendite: 0.7%; 16.06%, -3.16%, 38.60%
Anfangswert: Gewichtung Angelegte Summe --> 50%25k = 12500€; 10%25k; 30%25k; 10%25k
Endwert: Anfangswert
(1+Rendite) --> 12500(1+0.7%) = 12587.5€
Alle Endwerte sollen summiert werden (hier 26217€)

Endgewichtung= Endwert/ Summe der Endwerte

Nur die Endgewichtung in jeder Kategorie soll angezeigt werden.

Als ersten Schritt habe ich versucht, die angelegte Summe aus dem Text zu extrahieren:

// Angelegte Summe extrahieren
if (value('EX02_01')== TB01){
    $Summe1 = value('200000');
} elseif (value('EX02_01')== TB02) {
    $Summe2 = value('25000');
} elseif (value('EX02_01')== TB03) {
    $Summe3 = value('30000');
} else { 
    $Summe4 = value('100000');

Hierbei trat folgender Fehler auf:

Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Uncaught Error: Undefined constant "s2survey\questionnaire\environment\TB01" in /var/www/s2survey/html/lib/s2survey/phpcode/PHPCodeExecutor.php(547) : eval()'d code:4 Stack trace: #0 /var/www/s2survey/html/lib/s2survey/phpcode/PHPCodeExecutor.php(547): eval() #1 /var/www/s2survey/html/lib/s2survey/questionnaire/php/PHPCodeExecutorQnr.php(63): s2survey\phpcode\PHPCodeExecutor->runCode() #2 /var/www/s2survey/html/inc/QuestionnairePHP.php(563): s2survey\questionnaire\php\PHPCodeExecutorQnr->runCode() #3 /var/www/s2survey/html/lib/s2survey/questionnaire/QuestionnaireElement.php(480): QuestionnairePHP->runElement() #4 /var/www/s2survey/html/lib/s2survey/questionnaire/QnrPage.php(1516): s2survey\questionnaire\QuestionnaireElement->run() #5 /var/www/s2survey/html/lib/s2survey/questionnaire/QnrPage.php(1435): s2survey\questionnaire\QnrPage->runContent() #6 /var/www/s2survey/html/inc/InterviewCase.php(1469): s2survey\questionnaire\QnrPage->run() #7 /var/www/s2survey/html/inc/Interviewer.php(655): InterviewCase->createQuestionnairePage() #8 /var/www/s2survey/html/inc/Interviewer.php(824): Interviewer->handleCreate() #9 /var/www/s2survey/html/inc/Interviewer.php(1951): Interviewer->handleInterview() #10 /var/www/s2survey/html/rer/index.php(4): Interviewer::run() #11 {main} thrown
Zeile: 4

PHP-Code

001 namespace s2survey\questionnaire\environment;
002 
003  
004 if (value('EX02_01')== TB01){
005     $Summe1 = value('200000');
006 } elseif (value('EX02_01')== TB02) {
007     $Summe2 = value('25000');
}

EX02 ist die interne Variable, die speichert welcher der 4 Texte (TB01 bis TB04) gezogen wird.

Wie behebe ich diesen Fehler?

Wie kann ich die Veränderungen berechnen und anzeigen?

Vielen Dank im Voraus.

1 Answer

0 votes
by SoSci Survey (305k points)

Der Fehler beschwert sich über diese Zeile:

if (value('EX02_01')== TB01) {

Was erwarten Sie denn in der Variable EX02_01? Wenn es eine Zahl ist, dann müsste rechts vom == eine Zahl stehen. Wenn Sie es mit der Variable TB01 vergleichen möchten, müssten Sie auch hierfür value() verwenden:

if (value('EX02_01') == value('TB01')) {

Aber Ihrer Frage entnehme ich, dass es sich eher um die Ausprägung z.B. einer Zufallziehung handelt? Dann ...

if (value('EX02_01') == 1) {

Oder vielleicht steht in EX02_01 auch schon die Summe als Zahl?

Wie kann ich die Veränderungen berechnen und anzeigen?

Klären wir erst einmal, was genau Sie in den internen Variablen abgelegt haben. Und woraus sich eine Veränderung der Gewichtung ergibt oder ableiten lässt? Dann wird das mit der Antwort einfacher.

by s222544 (565 points)
Vielen Dank für Ihren hilfreichen Kommentar! Die Gewichtungen funktionieren richtig, nur kommt folgende Fehlermeldung auf:
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: A non-numeric value encountered
Zeile: 19

PHP-Code

016 $begassets_bo1 = $Summe * (value('TE01_03') / 100);
017 $begassets_go1 = $Summe * (value('TE01_04') / 100);
018
019 $ren1 = (float)str_replace('%', '', value('EX04_01')/100);
020 $ren2 = (float)str_replace('%', '', value('EX04_02')/100);
021 $ren3 = (float)str_replace('%', '', value('EX04_03')/100);
022 $ren4 = (float)str_replace('%', '', value('EX04_04')/100);
Fehler im Fragebogen: A non-numeric value encountered
Zeile: 20

PHP-Code

017 $begassets_go1 = $Summe * (value('TE01_04') / 100);
018
019 $ren1 = (float)str_replace('%', '', value('EX04_01')/100);
020 $ren2 = (float)str_replace('%', '', value('EX04_02')/100);
021 $ren3 = (float)str_replace('%', '', value('EX04_03')/100);
022 $ren4 = (float)str_replace('%', '', value('EX04_04')/100);
023
Fehler im Fragebogen: A non-numeric value encountered
Zeile: 21

PHP-Code

018
019 $ren1 = (float)str_replace('%', '', value('EX04_01')/100);
020 $ren2 = (float)str_replace('%', '', value('EX04_02')/100);
021 $ren3 = (float)str_replace('%', '', value('EX04_03')/100);
022 $ren4 = (float)str_replace('%', '', value('EX04_04')/100);
023
024 $endassets_cash1 = $begassets_cash1*(1+$ren1);
Fehler im Fragebogen: A non-numeric value encountered
Zeile: 22

PHP-Code

019 $ren1 = (float)str_replace('%', '', value('EX04_01')/100);
020 $ren2 = (float)str_replace('%', '', value('EX04_02')/100);
021 $ren3 = (float)str_replace('%', '', value('EX04_03')/100);
022 $ren4 = (float)str_replace('%', '', value('EX04_04')/100);
023
024 $endassets_cash1 = $begassets_cash1*(1+$ren1);
025 $endassets_ak1 = $begassets_ak1*(1+$ren2);

Debug Informationen für die Fehler Zeilen ren1 bis 4:

Debug-Information für $ren1:
$ren1 = 0.004 (double) korrekt nur in Dezimalform

Debug-Information für $ren2:
$ren2 = 0.2548 (double) auch korrekt, wieder in Dezimalform

Debug-Information für $ren3:
$ren3 = -0.0165 (double)

Debug-Information für $ren4:
$ren4 = -0.309 (double)

Woran liegt dieser Fehler?

Vielen vielen Dank für Ihre Unterstützung!
by SoSci Survey (305k points)
> $ren1 = (float)str_replace('%', '', value('EX04_01')/100);

Sie solten die Klammer noch ein wenig anders setzen. Erst str_replace(), dann durch 100 dividieren.
by s222544 (565 points)
Vielen Dank für Ihre Hilfe!
Das Problem wurde behoben! :)

Es tritt nur noch ein Fehler auf, wenn eine oder mehrere Kategorien (der 4) eine Gewichtung von 0% haben. Zum Beispiel: 100% Cash und nichts in den anderen dreien.

Es tritt folgender Fehler auf, immer in (ab) der Zeile, die eine Gewichtung von 0% haben:

Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Unsupported operand types: string / int
Zeile: 15

PHP-Code

012 }
013
014 $begassets_cash1 = $Summe * (value('TE01_01') / 100);
015 $begassets_ak1 = $Summe * (value('TE01_02') / 100);
016 $begassets_bo1 = $Summe * (value('TE01_03') / 100);
017 $begassets_go1 = $Summe * (value('TE01_04') / 100);
018

Habe jetzt folgenden Code unter "Angelegter Summe" ergänzt - ohne Behebung des Problems.
if (value('TE01_01') == '') {
    $weight_cash1 = '';
} elseif (value('TE01_02') == '') {
    $weight_ak1 = '';
} elseif (value('TE01_03') == '') {
    $weight_bo1 = '';
} elseif (value('TE01_04') == '') {
    $weight_go1 = '';
}

if (value('TE01_01') == '100') {
    $weight_cash1 = 100;
} elseif (value('TE01_02') == '100') {
    $weight_ak1 = 100;
} elseif (value('TE01_03') == '100') {
    $weight_bo1 = 100;
} elseif (value('TE01_04') == '100') {
    $weight_go1 = 100;
}

danach kommt $begassets_cash1 = $Summe * (value('TE01_01') / 100); usw.


Ich bin sehr dankbar für Ihre Hilfe!
by SoSci Survey (305k points)
> Fehler im Fragebogen: Unsupported operand types: string / int

Was genau wird denn in TE01_02 gespeichert, wenn da Gewicht dort 0 ist?

Sie können den Fehler voraussichtlich durch eine explizite Umwandlung in eine Zahl vermeiden:

$begassets_ak1 = $Summe * ((int)value('TE01_02') / 100);

Ob Sie (int) oder (float) für das sog. "typecasting" verwenden, das hängt natürlich davon ab, ob die Zahl als Ganzzahl oder Dezimalzahl gespeichert ist.
by s222544 (565 points)
Vielen Dank für Ihren Hinweis mit (int)! Alles funktioniert!

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

...