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

Hallo,

zunächst einmal habe ich folgendes Ziel:
- ich möchte in einer Frage einen Platzhalter ersetzen
- der Platzhalter besteht aus einer Liste von sechs möglichen Textversionen
- es soll aus dieser Liste eine Textversion ausgewählt werden, nämlich die mit den wenigsten Antworten aus den abgeschlossenen Fragebögen

Frage-Beispiel B001:
Haben Sie in den letzten drei Jahren %projekt% durchgeführt?
Items: Ja / Nein

Platzhalter %projekt% besteht aus sechs items (Angelegt als Zufallsgenerator in B002):
projekttyp 1
projekttyp 2
projekttyp 3
projekttyp 4
projekttyp 5
projekttyp 6

Ich möchte jetzt die Option "ziehen", die bisher die wenigsten Antworten erhalten hat. Dazu dachte ich mit statistic('count') zähle ich jeweils die Antwort aus B002, 1 bis 6. Damit erhalte ich aber nur 6 Werte (Anzahl der bisher gegeben Antworten in abgeschlossenen Interviews).

MEIN PROBLEM: wie kriege ich hier eine Reihenfolge rein, die mir dann ermöglicht eben die Antwort zu bestimmen, die bislang die wenigsten Antworten generiert hat.

Ich hoffe es ist klar geworden, was ich meine und danke für anyhelp!
katrin

in SoSci Survey (dt.) by s065450 (160 points)

1 Answer

0 votes

Ich bin nicht 100%ig sicher, ob ich die Frage komplett verstanden habe. Sie möchten einen Zufallswert verwenden - aber wenn ein Projekttyp seltener mit "Ja" beantwortet wurde, soll dieser verwendet werden. Korrekt?

Erstmal bauen Sie dafür ein Array, welches die Projekt-Codes (1..6) und die zugehörigen Anzahl beinhaltet, die Sie mittels statistic() ermittelt haben. Ich gehe einmal davon aus, Sie haben schon eine Möglichkeit

$projects = array(
  1 => statistic('crosscount', ['IV01', 'AB02'], [1, 2]),
  2 => statistic('crosscount', ['IV01', 'AB02'], [2, 2]),
  // u.s.w.
);

Und jetzt Sie suchen alle Codes heraus, welche die maximale Häufigkeit haben:

$max = max($projects);
$codes = array();
foreach ($projects as $code => $cnt) {
  if ($cnt == $max) {
    $codes[] = $code;
  }
}

Jetzt noch mischen und das erste Element verwenden. Speichern nicht vergessen.

shuffle($codes);
$code = $codes[0];
put('IV01', $code);
by SoSci Survey (55.7k points)
Danke für die prompte Antwort.

Kann ich anstatt nach maximaler Häufigkeit auch die geringste Häufigkeit abfragen, also "min"?

Shuffeln muss für den Fall, dass es gleiche Häufigkeiten gibt, richtig?
Ja. Aber das haben Sie mittels Ausprobieren inzwischen sicherlich bereits geklärt.
Ich habe noch folgendes Problem: ich lasse die 'min' Häufigkeit auszählen; allerdings gehen die Werte (value = 0) nicht in die Auswertung mit ein. Im Ergebnis wird dann nur der Projekttyp ausgewertet, der schon einen value > 0 hat. Ich will ja aber genau die Projekttypen zuerst in abfragen, die noch keine oder die geringste Häufigkeit haben.

Hier mal mein Code (kann mensch in dem Forum eigentlich nur mit dieser Kommentarfunktion antworten?)
$min = min($projects);
$codes = array();
foreach ($projects as $code => $cnt) {
  if ($cnt == $min) {
    $codes[] = $code;
  }
}

shuffle($codes);
$code = $codes[0];
put('IV01', $code);

Zählung - Ergebnis:
projekttyp 1: value = 0
projekttyp 2: value = 0
projekttyp 3: value = 0
projekttyp 4: value = 3
projekttyp 5: value = 0
projekttyp 6: value = 0

Ich möchte ja gern, dass jetzt einer der Projekttypen gefragt wird mit value = 0 (eben nicht projekttyp 4). Das passiert aber, weil - so vermute ich -  value = 0 nicht "gezählt" werden.  

Gibt´s dafür ne Lösung? Kann man definieren, dass auch "0" gezählt wird?
Es handlet sich hier um ein Frage-Antwort-System. Insofern kann man entweder eine neue Frage stellen (auch als "related question" wenn man möchte) oder einen Kommentar zu einer Frage oder Antwort hinterlassen.

Eigentlich sollte der erste Teil des Codes ($projects...) auch die Werte mit 0 zählen, die bisher nicht vorkamen. Könnten Sie unter der Definition des Arrays einmal folgende Zeile ergänzen und die im Debug-Modus angezeigte Information zu $projects posten?

debug($projects);
ich hatte die Daten gelöscht und noch mal von vorn zählen lassen, daher hier mal das neue Ergebnis:

Zählung - Ergebnis:
projekttyp 1: value = 0
projekttyp 2: value = 0
projekttyp 3: value = 0
projekttyp 4: value = 2
projekttyp 5: value = 1
projekttyp 6: value = 0

Debug information for $project:
1 $project1, 2 $project2, 3 $project3, 4 $project4, 5 $project5, 6 $project6

debug('IV01') = 4
debug($min) = $project4
debug($code) = 4

Heißt das, es wird nicht die minimale sondern maximale Häufigkeit gezählt? oder heißt das, dass er nicht das erste sondern das letzte Element zieht?
Könnten Sie noch den PHP-Code posten, den Sie für die Erstellung des Arrays $projects nutzen? Da sollten eigenltich Zahlen im Array stehen, nicht "$project1" u.s.w....
$project = array(
  1 => ('$project1'),
  2 => ('$project2'),
  3 => ('$project3'),
  4 => ('$project4'),
  5 => ('$project5'),
  6 => ('$project6'),
);

Vorher habe ich $project1etc. durch statistic(crosscount) definiert:
$project1 = statistic('crosscount', 'B032,B046_01,A001,A017', '1,1,29,7');
Lassen Sie bitte die Klammer (irrelevant) und die Anführungszeichen (die Fehlerquelle) weg. Im Moment speichern sie einfach nur den Text "$project1" an den ersten Platz des Arrays.
Perfekt!!!!
Das war's wohl. Ich teste noch ein bisschen. Beim einmaligen Testen hat es jetzt funktioniert :-)))
Statistik nutzen und dann shuffle?
...