0 votes
in SoSci Survey (dt.) by s111639 (130 points)
edited by s111639

Hallo,

ich plane eine Tagebuchstudie mit 7 täglichen Befragungen und einer Baseline-Erhebung. Um zu prüfen, dass die VPN mindestens 5 Fragebögen bearbeitet haben, habe ich folgenden Code entwickelt. Nur VPN, die dieses Kriterium erfüllen sollen einen Code erhalten, den sie mir senden können, um die VPN-Stunden zu erhalten. Es treten aber Probleme auf.

Hier der PHP-Code:

put('AB04_01', caseSerial());
statistic('count', 'AB04_01', caseSerial());
if (statistic('count', 'AB04_01', caseSerial()) >= 5)
{text('AB02');} 
else {text('AB05');}

statistic('count', 'AB04_01', caseSerial());
if (statistic('count', 'AB04_01', caseSerial()) >= 5)
{question('AB06');} 
{replace('%code%', 'AB06', 'response');
html('<p>Ihr Code ist: <strong>%code%</strong></p>');}

--> Ist es überhaupt in Ordnung selbst Seriennummern anzulegen, um diese in den Zufallsgenerator für die Vergabe eines Codes einzuspeisen oder entsehen dadurch Probleme, weil ja jeder VPN auch durch die Serienmail Funktion eine Seriennummer zugeordnet wird?

--> eigentlich wollte ich noch folgenden Befehl benutzen, damit eine Fehlermeldung angezeigt wird, wenn die Urne leer ist. Dies erzeugt jedoch eine Fehlermeldung, weil die entsprechende Variable nicht im Fragebogen auftaucht

if (value('AB01_CP') > 0) {text('AB03');} else

Kann ich den Befehl weglassen, wenn ich eine großzügige Anzahl an Seriennummern verwende?

debug(statistic('count', 'AB04_01', caseSerial()));

--> hier zeigt der Funktionstest an :
Debug-Information für statistic('count', 'AB04_01', caseSerial()):
statistic('count', 'AB04_01', caseSerial()) = 0 (integer)

Ist das so korrekt?

1 Answer

0 votes
by SoSci Survey (304k points)

Ist es überhaupt in Ordnung selbst Seriennummern anzulegen, um diese in den Zufallsgenerator für die Vergabe eines Codes einzuspeisen

Sie arbeiten ja mit Serienmails. Dabei wird jedem Eintrag in der Adressliste automatisch eine Personenkennung zugewiesen, die in allen seinen Interviews als "SERIAL" vermerkt wird. Sie legen also gar keine Seriennummern an - das macht die Serienmail-Funktion.

eigentlich wollte ich noch folgenden Befehl benutzen, damit eine Fehlermeldung angezeigt wird, wenn die Urne leer ist.

Ich würde Ihnen auf jeden Fall so ein "Sicherheitsnetz" empfehlen. Man kann ja nie wissen. Natürlich sollten Sie trotzdem mehr als genug Codes in den Zufallsgenerator legen.

hier zeigt der Funktionstest an :
statistic('count', 'AB04_01', caseSerial()) = 0 (integer)

Das bedeutet, dass mit der aktuellen Seriennummer noch kein einziger (FINISHED=1) Fall im Datensatz liegt. Starten Sie mal einen Fragebogen im Debugging-Modus und direkt nach dem Start hängen Sie oben in der Adresszeile des Browsers eine Seriennummer an, also ...&s=Test001, dann mit der EIngabeteste bestätigen und im Fragebogen auf "Weiter" klicken.

Wenn Sie das korrekt gemacht haben, sollten unter "Erhobene Daten" -> "Daten ansehen" in der Variable "SERIAL" der Code "Test001" angezeigt werden. Füllen Sie den Fragebogen komplett aus, damit er in der statistic()-Zählung erscheint.

Dann rufen Sie den Fragebogen mit dem statistic() nochmal auf und hängen auch dort die Seriennummer an den Link an. Nochmal mit der Eingabetaste bestätigen ... und wenn alles korrekt läuft sollte dann angezeigt werden

statistic('count', 'AB04_01', caseSerial()) = 1 (integer)

Wenn hier nun die 1 steht (=es liegt ein Fall zu der Seriennummer vor), dann sollte es soweit passen. Wichtig ist, dass Sie das put() in jedem Ihrer Fragebögen machen, damit dieser in der statistic()-Funktion gezählt wird.

Ach ja, Vorsicht bitte mit diesem Code, den Sie oben gepostet haben:

if (statistic('count', 'AB04_01', caseSerial()) >= 5)
{question('AB06');} 
{replace('%code%', 'AB06', 'response');
html('<p>Ihr Code ist: <strong>%code%</strong></p>');}

Ich formatiere das mal ein wenig anders:

if (statistic('count', 'AB04_01', caseSerial()) >= 5) {
  question('AB06');
} 
{
  replace('%code%', 'AB06', 'response');
  html('<p>Ihr Code ist: <strong>%code%</strong></p>');
}

Da steht kein else zwischen der oberen und unteren Klammer. Das heißt: Der zweite Teil wird immer ausgeführt - unabhängig vom IF. Ich glaube, Sie möchten eigentlich das hier:

if (statistic('count', 'AB04_01', caseSerial()) >= 5) {
  question('AB06');
  replace('%code%', 'AB06', 'response');
  html('<p>Ihr Code ist: <strong>%code%</strong></p>');
}
by SoSci Survey (304k points)
> Ist folgender Code korrekt und sollte ohne Fehlermeldung funktionieren?

Das kann der Fragebogen deutlich besser beantworten als ich :)

Was ich sagen kann, ist dass die folgende Zeile keine Funktion übernimmt:

> statistic('count', 'AB04_01', caseSerial());

Im darunter stehenden Filter ergobt deren Verwendung hingegen Sinn.

Weniger sinnvoll (aber nicht zwangsläufig falsch) ist es, dass Sie denselben Filter gleich 3-mal verwenden. Eigentlich würde man das alles in denselben Filter schreiben.
by s111639 (130 points)
es handelt sich um eine Tagebuchstudie, die schon im Feld ist, weshalb ich mich nicht getraut habe, den Code mit der Ergänzung nochmals zu testen (es hat allerdings noch niemand den betreffenden Fragebogen sieben gemacht).

Ist es möglich während der laufenden Befragung einen neuen Fragebogen anzulegen und es dort zu testen oder was würden Sie empfehen?

statistic('count', 'AB04_01', caseSerial()); --> Es würde aber nicht schaden, wenn ich die Zeile drin lasse, auch wenn sie überflüssig ist, oder?

Ok gut, ich habe mich für die umständliche Version entschieden, weil das für mich weniger Fehlerpotential hatte. Wenn es nicht falsch, sondern nur umständlich ist, würde ich es daher so lassen.
by SoSci Survey (304k points)
> Ist es möglich während der laufenden Befragung einen neuen Fragebogen anzulegen und es dort zu testen oder was würden Sie empfehen?

Ja. Sie sollten nur aufpassen, dass unter "Fragebögen verwalten" nachher noch der richtige Fragebogen als "Standard" ausgewählt ist, falls das relevant ist.

> Es würde aber nicht schaden, wenn ich die Zeile drin lasse, auch wenn sie überflüssig ist, oder?

Korrekt.

> Wenn es nicht falsch, sondern nur umständlich ist, würde ich es daher so lassen.

Ja, das scheint mir sinnvoll - außer, wenn Sie ohnehin in einem zweiten Fragebogen noch testen.
by s111639 (130 points)
edited by s111639
Gut, das habe ich jetzt versucht. Der Befehl:

debug(statistic('count', 'AB04_01', caseSerial()));
zeigt mir allerdings eine Zahl größer als 290 an, liegt das daran, dass im Debug-Modus schon so viele Fragebogen gemacht wurden? Wenn die VPN das mit der Seriennummer machen, sollte ja dann die richtige Anzahl bearbeitete Fragebögen berechnet werden?

Das hatte ich mit dem alten Befehl auch eigentlich schonmal getestet.

Wenn ich eine Test-Seriennummer anhänge und der Wert für den Befehl 0 ist, wird aber wie gewünscht nur ein Text angezeigt.

Ist es normal, dass Codes, die im Debug-Modus gezogen werden, beim Zufallsgenerator nicht als gezogen vermerkt werden? Die entsprechenden Variablen sind bei mir immer noch als 0 x gezogen aufgelistet.

Den debug Befehl habe ich jetzt im Fragebogen fürs Feld gelöscht!
by SoSci Survey (304k points)
> zeigt mir allerdings eine Zahl größer als 290 an, liegt das daran, dass im Debug-Modus schon so viele Fragebogen gemacht wurden?

Ja, im Debug-Modus werden auch Debug-Interviews mitgezählt - damit man die statistic()-Funktion testen kann.

> Wenn die VPN das mit der Seriennummer machen, sollte ja dann die richtige Anzahl bearbeitete Fragebögen berechnet werden?

Ja.

> Ist es normal, dass Codes, die im Debug-Modus gezogen werden, beim Zufallsgenerator nicht als gezogen vermerkt werden?

Wenn das Projekt im Feld ist, ja. Sonst würde man sich ja beim Testen die Ziehung verzerren.

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

...