0 votes
in SoSci Survey (dt.) by s086587 (145 points)

// Quote definieren und zuordnen
$quota = [
'2-1' => 49, '2-2' => 53, // 49 weibl./53männl. Personen für die Altersgruppe 2 (18-25 Jahre)
'3-1' => 35, '3-2' => 37, // Altersgruppe 3 (25-30 Jahre)
'4-1' => 39, '4-2' => 42, // Altersgruppe 4 (30-35 Jahre)
'5-1' => 38, '5-2' => 39, // Altersgruppe 5 (35-40 Jahre)
'6-1' => 37, '6-2' => 37, // Altersgruppe 6 (40-45 Jahre)
'7-1' => 35, '7-2' => 35, // Altersgruppe 7 (45-50 Jahre)
'8-1' => 45, '8-2' => 45, // Altersgruppe 8 (50-55 Jahre)
'9-1' => 49, '9-2' => 49, // Altersgruppe 9 (55-60 Jahre)
'10-1' => 43, '10-2' => 42, // Altersgruppe 10 (60-65 Jahre)
'11-1' => 37, '11-2' => 33, // Altersgruppe 11 (66-70Jahre)

'12-1' => 31,  '12-2' => 27, //  Altersgruppe 12 (71-75Jahre)
'13-1' => 73,  '13-2' => 49,//  Altersgruppe 13 (75+)

];

// Geschlecht wird direkt ausgelesen
$gender = value('SD01');

// Das Alter wird umkodiert
$age = value('SD06_01');
if ($age < 18) {
$ageGroup = 1;
} elseif ($age <= 25) {
$ageGroup = 2;
} elseif ($age <= 30) {
$ageGroup = 3;
} elseif ($age <= 35) {
$ageGroup = 4;
} elseif ($age <= 40) {
$ageGroup = 5;
} elseif ($age <= 45) {
$ageGroup = 6;
} elseif ($age <= 50) {
$ageGroup = 7;
} elseif ($age <= 55) {
$ageGroup = 8;
} elseif ($age <= 60) {
$ageGroup = 9;
} elseif ($age <= 65) {
$ageGroup = 10;
} elseif ($age <=70){
$ageGroup = 11;
}elseif ($age <=75){
$ageGroup = 12;
}else{
$ageGroup = 13;
}

// Definition einer Variable mit Altesgruppe und Geschlecht
// Aus 3 und 2 wird hier '3-2'
$demGroup = $ageGroup.'-'.$gender;

// Screenout, wenn Alter oder Geschlecht keiner der Gruppen zugeordnet werden kann
if (!array_key_exists($demGroup, $quota)) {
redirect('https://samplicio.us/s/ClientCallBack.aspx?RIS=20&RID=%reference%'); //QualificationTermination: too young or no gender
}

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$cases = statistic('count', 'IN14_01', $demGroup);

// Step 1: Quote für ALLE TN voll?
// Auslesen der Quote für ALLE für die demografische Gruppe
$maxPerGroup = $quota[$demGroup];

// Quotenstopp, bei Quote für ALLE TN voll
if ($cases >= $maxPerGroup) {

redirect('https://samplicio.us/s/ClientCallBack.aspx?RIS=40&RID=%reference%'); //Overquota reached sufficient participants for this age group

}

// Auswahl des Treatments
// 1 = Real x Mensch (Baseline)
// 2 = Hypo x Mensch
// 3 = Realx KI
// 4 = Hypo x KI
$zahl = value('B013'); // Zufallszahl wurde von B013 gezogen

// Step 2: Es gibt irgendwo auf jeden Fall noch Platz in dieser Quote. Prüfe, ob das in dem gezogenen Treatment der Fall ist
// Abruf der vorliegenden Fälle für diese Merkmalsausprägung x Treatment
$casesTreatment = statistic('count', 'IN19_0'.$zahl, $demGroup);

// Ist für das Treatment in der Gruppe schon Maximale Quotenanzahl erreicht?
if ($casesTreatment>=ceil($maxPerGroup/4)){ // Overquota reached sufficient participants for this age/gender group in that Treatment

$maxVersuche = 3;
$bedingung = false;
for ($versuch = 1; $versuch <= $maxVersuche && !$bedingung; $versuch++){
    $zahl = $zahl % 4+1;    //teile in das nächste Treatment zu
    // Abruf der vorliegenden Fälle für diese Merkmalsausprägung x Treatment
    $casesTreatment = statistic('count', 'IN19_0'.$zahl, $demGroup);
    if($casesTreatment<=ceil($maxPerGroup/4)){ // Ist in dem neuen Treatment Platz
        $bedingung =true; //Wenn ja, breche Schleife ab
        **put('B013', $zahl); //ändere das zufällig gezogene Treatment auf das neu zugewiesene Treatment**
    }
}
// Überprüfe, ob der TN einem neuen Treatment zugeordnet werden konnte
if (!$bedingung && $versuch > $maxVersuche) {
    redirect('https://samplicio.us/s/ClientCallBack.aspx?RIS=40&RID=%reference%'); //Overquota reached sufficient participants for this age group
    // sonst leite in den Fragebogen ein.

}
}

// Reihenfolge im Fragebogen
if ($zahl == 1) { // Gain x Mensch
setPageOrder('InstructionReal', 'Teil1', 'Malaria', 'HKI', 'GiveWell', 'Human', 'ControlHuman', 'CheckHuman', 'Correct');
}
if ($zahl == 3) { // Gain x AI
setPageOrder('InstructionReal', 'Teil1', 'Malaria', 'HKI', 'GiveWell', 'AI', 'ControlAI', 'CheckAI', 'Correct');
}
if ($zahl == 2) { // Hypo x Mensch
setPageOrder('InstructionHypo', 'Teil1', 'HypoMalaria','HypoHKI', 'GiveWell', 'HypoHuman', 'ControlHH', 'CheckHH', 'Correct');
}
if ($zahl == 4) { // Hypo x AI
setPageOrder('InstructionHypo', 'Teil1', 'HypoMalaria','HypoHKI', 'GiveWell', 'HypoAI','ControlAIH', 'CheckAIH', 'Correct');
}

put('CO04_01', 0);
put('CO10_01', 0);

Hallo ich möchte, über den Code oben, einen Wert der via Zufallsziehung gezogen wurde, direkt anpassen. Ich bekomme, aber einen Fehler für den put()-Befehl. Gibt es hier einen anderen Befehl?

Danke und viele Grüße

1 Answer

0 votes
by SoSci Survey (308k points)

Sofern CO04 und CO10 Fragen vom Typ "interne Variablen" sind, speichern Sie mit dem Code oben jeweils den Wert 0 in CO04_01 und CO10_01.

put('B013', $zahl); //ändere das zufällig gezogene Treatment auf das neu zugewiesene Treatment

Ich würde empfehlen, dass Sie den gezogenen Wert in eine interne Variable kopieren, und diese bei Bedarf anpassen, also z.B.

$zahl = value('B013');
put('IV01_01', $zahl);
...
if (...) {
    $zahl = $zahl % 4+1;
    put('IV01_01', $zahl);
}

So wissen Sie in der Auswertung immer, welche Zahl gezogen wurde - und im weiteren Verlauf des Fragebogen würden Sie mit der internen Variable weiterarbeiten.

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

...