Zählwerte in jeder ZeileIch habe ein Skript mit Spalte 1-6 in einer Liste
Ich versuche, ein JSL-Skript zu schreiben, das zählt, wie oft das Wort POR und wie oft das Wort test vorkommt
Beispiel unten (habe die letzten 2 Spalten manuell gemacht)

Wenn ich das Forum lese, verstehe ich, dass ich DT in eine Matrix umwandeln muss, aber ich kann es nicht zum Laufen bringen.
Vielen Dank!
SkriptingRe: Werte in jeder Zeile zählenKleine Frage, brauchst du es pro Spalte oder insgesamt?
Re: Werte in jeder Zeile zählenHier sind die Formeln, die eine Möglichkeit sind, die Anzahlen zu berechnen
count = 0;
For( i = 1, i <= 6, i++,
count = Sum( count, Contains( As Column( i ), "test" ) )
);
count;
count = 0;
For( i = 1, i <= 6, i++,
count = Sum( count, Contains( As Column( i ), "POR" ) )
);
count;
Re: Werte in jeder Zeile zählenfür alle, aber es ist pro Reihe
wie jede Zeile zählt, wie oft ein Wert in dieser Zeile auftauchte und dann am Ende dieser Zeile schreibe ich den "count" -Wert
Siehe mein Beispiel unten, ich habe eine Tabelle hinzugefügtRe: Werte in jeder Zeile zählenEin anderer Weg.
Spaltenformel zum Zählen über die Reihe
Diese Formel verwendet die Indizierung von Datentabellen, um eine Liste wie {"test","POR","test","test"} für Zeile 8 zu erhalten.
Oben habe ich 1::4 verwendet, was als Abkürzung zu Index(1,4) wird. Sie sollten {Spalte1, Spalte 2, ... verwenden. Spalte N} stattdessen, weil, als ich einen der Werte in "xyzzy" änderte, die Werte der Formelspalten nicht aktualisiert wurden, bis ich die Formeln erneut ausführen musste. Wenn JMP nicht erkennen kann, dass eine Spalte auf eine andere Spalte verweist, wird sie nicht erneut ausgewertet.
Das funktioniert besser:
Formel mit expliziten Spaltennamen
Re: Werte in jeder Zeile zählenSehr cool........aber ich glaube, du bist ein bisschen in den großen Abgrund getretenRe: Werte in jeder Zeile zählenIch weiß ... aber es ist eine überraschend gute Methode aus zeitlicher Sicht. Interessanterweise ist die Concat-Methode, so seltsam sie auch ist, auch sehr schnell.
Für eine Tabelle mit 200.000 Zeilen x 10 Spalten (komprimierte Datei im Anhang) dieser Werte beispielsweise:

Names Default To Here( 1 );
dt = Current Data Table();
t1 = HP Time();
dt << new column("xx",
formula(sum( design (dt[row(), {:col1, :col2, :col3, :col4, :col5, :col6, :col7, :col8, :col9, :col10}], {"test"})))
);
t2 = hptime();
dt << New Column( "xx",
formula(
count = 0;
dt = :Col1 << get data table;
For( i = 1, i <= 10, i++,
If( Column( dt, i )[Row()] == "test", count ++)
);
count;
)
);
t3 = hptime();
dt << new column("xx", formula(nrow(loc(dt[row(), {:col1, :col2, :col3, :col4, :col5, :col6, :col7, :col8, :col9, :col10}], "test"))));
t4 = hptime();
dt << new column("concat", character, formula(Col1 || :Col2 || :Col3 || :Col4 || :Col5 || :Col6 || :Col7 || :Col8 || :Col9 ||:Col10));
dt << new column("xx", formula(length(:concat)-30));
t5 = hptime();
print(evalinsert("Design matrix method: ^(t2-t1)/1e6^ seconds."));
print(evalinsert("Looping method: ^(t3-t2)/1e6^ seconds."));
print(evalinsert("Nrow(Loc()) method: ^(t4-t3)/1e6^ seconds."));
print(evalinsert("Concat method: ^(t5-t4)/1e6^ seconds."));
Re: Werte in jeder Zeile zählenHallo,
Eine weitere Möglichkeit besteht darin, alle Spalten mit einer 1-Klick-Transformation zu verketten.
Da "test" 1 Zeichen mehr als POR ist und Sie keine fehlenden Daten haben, wird die resultierende Zeichenfolge für jeden enthaltenen "test" um 1 Zeichen erhöht, verglichen mit einem String mit nur "POR".
Wählen Sie zum Verketten die gewünschten Spalten aus und klicken Sie mit der rechten Maustaste, um wie unten beschrieben auszuwählen. Benennen Sie dann die Spalte der Kürze halber in "concat" um.

In der folgenden Beispieltabelle gibt es 6 interessante Spalten; ein String mit nur "POR"s hätte also 6 * 3 = 18 Zeichen.
Daher verwenden wir die Formeln:
length(:concat) - 18 für die Anzahl von "test" == n_test.
und
6 - n_test für die Nummer von "POR".
Im Allgemeinen würden wir für n_test (length(:concat) - 18)/k verwenden, wobei k die Zeichendifferenz zwischen den beiden Phrasen ist. Da k == 1 ist, verzichten wir hier darauf.

Prost,
Brady
Re: Werte in jeder Zeile zählenDas gefällt mir, Craige.
Es sieht so aus, als ob die Designmatrix-Funktion diese Idee auch verarbeiten kann - versuchen Sie diese Formel, um die Anzahl der "a"s zu zählen.
dt = :Col1 << get data table;
Sum( Design( dt[Row(), {:Col1, :Col2, :Col3, :Col4, :Col5}], {"a"} ) );
Betreff: Zählwerte in jeder ZeileHallo, das geht nicht
zum Beispiel, wenn ich es auf diesem laufen lasse
| POR | POR | POR | POR |
| POR | POR | POR | POR |
| Prüfung | POR | POR | Prüfung |
| Prüfung | POR | POR | Prüfung |
| POR | POR | POR | POR |
| POR | POR | POR | POR |
| Prüfung | POR | POR | Prüfung |
| Prüfung | POR | Prüfung | Prüfung |
Die Zählungen kommen als 0 heraus
Was ich erwarten würde, wenn ich den "Test" starte, ist: 0,2,2,0,0,2,3
also die ausgabe ist so:
| POR | POR | POR | POR | 0 |
| POR | POR | POR | POR | 0 |
| Prüfung | POR | POR | Prüfung | 2 |
| Prüfung | POR | POR | Prüfung | 2 |
| POR | POR | POR | POR | 0 |
| POR | POR | POR | POR | 0 |
| Prüfung | POR | POR | Prüfung | 2 |
| Prüfung | POR | Prüfung | Prüfung | 3 |