Werte in jeder Zeile zählenIch habe ein Skript mit den Spalten 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 (die letzten beiden Spalten wurden manuell durchgeführt)

Beim Lesen des Forums verstehe ich, dass ich DT in eine Matrix umwandeln muss, aber ich schaffe es nicht, es zum Laufen zu bringen.
Danke!
Automatisierung und SkripterstellungBetreff: Werte in jeder Zeile zählenIch weiß ... aber aus zeitlicher Sicht ist es eine überraschend gute Methode. 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 sind hier beispielsweise die Laufzeiten aufgeführt:

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."));
Betreff: Werte in jeder Zeile zählenSehr cool........aber ich denke, du bist ein bisschen in den großen Abgrund geratenBetreff: Werte in jeder Zeile zählenDas gefällt mir, Craige.
Es sieht so aus, als ob die Design-Matrix-Funktion auch mit dieser Idee umgehen kann – probieren Sie diese Formel aus, 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: Werte in jeder Zeile zählenEin anderer Weg.
Column formula to count across rowColumn formula to count across rowSpaltenformel zur zeilenübergreifenden Zählung
Diese Formel verwendet die Subskription 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 in Index(1,4) umgewandelt wird. Sie sollten {Spalte1, Spalte 2, ... verwenden. Spalte N} stattdessen, denn als ich einen der Werte in „xyzzy“ änderte, wurden die Werte der Formelspalten erst aktualisiert, als ich die erneute Ausführung der Formeln erzwungen habe. Wenn JMP nicht erkennen kann, dass eine Spalte auf eine andere Spalte verweist, erfolgt keine Neuauswertung.
Das funktioniert besser:
formula with explicit column namesformula with explicit column namesFormel mit expliziten Spaltennamen
Betreff: Werte in jeder Zeile zählenHallo,
Bitte sehen Sie sich die Eigenschaft „Value Labels“ von JMP sowie die Spaltendienstprogramme „Labels to Codes“ und „Codes to Labels“ an.
Ich wäre nachlässig, wenn ich nicht die Verwendung der numerischen 1 für POR und 0 für Test befürworten würde (1: Test und 0: POR, wenn Sie es vorziehen). Mithilfe der Spalteneigenschaft „Value Label“ können wir diese Werte so erscheinen lassen, als wären sie „test“ und „POR“, intern sind sie jedoch Nullen und Einsen.
Da die Werte numerisch sind, können Berechnungen mithilfe nativer Spalten- und Zeilenformeln durchgeführt werden. Bei Einsen und Nullen ergibt die Summe die Anzahl der Einsen, während der Mittelwert den Anteil der Einsen angibt. Wenn wir in diesem Beispiel POR als 0 und „Test“ als 1 speichern, können wir die Anzahl der Tests in einer bestimmten Zeile ermitteln, indem wir einfach alle relevanten Spalten auswählen, mit der rechten Maustaste klicken und auswählen Neue Formelspalte > Kombinieren > Summe aus dem Popup-Menü.
Unten sehen Sie ein Bild, wie dies in der Praxis aussieht. Die Zellen scheinen Text zu enthalten, da die Wörter POR und Test linksbündig sind. Wenn Sie jedoch auf eine Zelle klicken, können Sie sehen, dass JMP tatsächlich eine Zahl intern speichert, ähnlich wie dies bei Datums- und Uhrzeitangaben der Fall ist.

Durch Klicken auf das * rechts neben den Spaltennamen im Bereich „Spalten“ (linke Mitte der Datentabelle) können wir „Wertbeschriftungen“ auswählen, um die aktuellen Einstellungen der Eigenschaft anzuzeigen:

Prost,
Brady
Betreff: Werte in jeder Zeile zählentolle Idee
Betreff: 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 länger als POR ist und keine Daten fehlen, erhöht sich die resultierende Zeichenfolge für jedes enthaltene „test“ um 1 Zeichen, verglichen mit einem String, der nur aus „POR“ besteht.
Zum Verketten wählen Sie die gewünschten Spalten aus, klicken mit der rechten Maustaste und wählen wie folgt aus. Benennen Sie dann der Kürze halber die Spalte in „concat“ um.

In der Beispieltabelle unten 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 Anzahl der „POR“.
Im Allgemeinen würden wir für n_test (length(:concat) - 18)/k verwenden, wobei k der Unterschied in den Zeichen zwischen den beiden Phrasen ist. Da k == 1 ist, lassen wir es hier weg.

Prost,
Brady
Betreff: Werte in jeder Zeile zählenIch habe die von Ihnen bereitgestellte Tabelle in JMP erstellt

Anschließend habe ich eine neue Spalte erstellt und die folgende Formel auf diese Spalte angewendet
count = 0;
For( i = 1, i <= 4, i++,
count = Sum( count, Contains( As Column( i ), "test" ) )
);
count;
Bitte beachten Sie, dass die For()-Schleife nur bis zu 4 reicht, da nur 4 Spalten in der Tabelle verarbeitet werden müssen
Es ergeben sich die folgenden Ergebnisse

Die Datentabelle habe ich beigefügt
Ich empfehle Ihnen dringend, sich die Zeit zu nehmen, das Dokument „Discovering JMP“ zu lesen, das im Pulldown-Menü „Hilfe“ verfügbar ist
Betreff: Werte in jeder Zeile zählenfür alle, aber es ist pro Zeile
So wie jede Zeile zählt, wie oft ein Wert in dieser Zeile vorkommt, und dann schreibe ich am Ende dieser Zeile den „Anzahl“-Wert
siehe mein Beispiel unten, ich habe eine Tabelle hinzugefügtBetreff: Werte in jeder Zeile zählenHey, das funktioniert nicht
zum Beispiel, wenn ich es darauf laufen lasse
| POR | POR | POR | POR |
| POR | POR | POR | POR |
| prüfen | POR | POR | prüfen |
| prüfen | POR | POR | prüfen |
| POR | POR | POR | POR |
| POR | POR | POR | POR |
| prüfen | POR | POR | prüfen |
| prüfen | POR | prüfen | prüfen |
Die Zählungen ergeben 0
Was ich erwarten würde, wenn ich den „Test“ ausführe, ist: 0,2,2,0,0,2,3
also die Ausgabe sieht so aus:
| POR | POR | POR | POR | 0 |
| POR | POR | POR | POR | 0 |
| prüfen | POR | POR | prüfen | 2 |
| prüfen | POR | POR | prüfen | 2 |
| POR | POR | POR | POR | 0 |
| POR | POR | POR | POR | 0 |
| prüfen | POR | POR | prüfen | 2 |
| prüfen | POR | prüfen | prüfen | 3 |
Betreff: Werte in jeder Zeile zählenHier sind die Formeln, die eine Möglichkeit zur Berechnung der Anzahl darstellen
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;
Betreff: Werte in jeder Zeile zählenKleine Frage: Brauchen Sie es pro Spalte oder insgesamt?