Ich versuche zu verstehen, wie man mit Objekten arbeitet, die Container für Zeilen sind. Selbst diese Beschreibung könnte unzutreffend sein.
Was ist „FilteredRows“ in diesem Kontext?
dt = Current Data Table();
FilteredRows = dt << get rows where( :Date == 12May2025 );
Show( N Rows( FilteredRows ) );
Um noch einmal kurz zurückzukommen: Gibt es einen JSL-Befehl, um ein Objekt auf ALLE Zeilen einer Datentabelle zu setzen? Oder ist das nie nötig?
Die nächstliegende Lösung, die „Alle Zeilen auswählen“ vermeidet, ist folgende:
AllRows = dt << get rows where(1);
Fühlt sich aber irgendwie wie Betrug an.
Noch wichtiger ist mir jedoch die Möglichkeit, zusätzliche Filter auf eine Teilmenge der Zeilen anzuwenden.
Das funktioniert zwar nicht, vermittelt aber die Absicht:
XFilteredRows = dt << get rows where( :X == 42 );
XYFilteredRows = XFilteredRows << get rows where(:Y ==1.21);
Ja, ich kann beides in einer Zeile erledigen.
XYFilteredRows = dt << get rows where(:X==42 & :Y==1.21);
Ich plane jedoch, dies in einer For Each Row-Schleife zu verwenden, wobei X 99 % der Zeilen entfernt, und ich muss anschließend weitere Parameter unabhängig filtern, d. h. Zeilen, die XY erfüllen, Zeilen, die XZ erfüllen, Zeilen, die X, aber nicht Y erfüllen usw.
Ich glaube, es ist bei großen Tabellen schneller, die X gefilterten Zeilen beizubehalten.
In diesem Zusammenhang möchte ich noch erwähnen, dass ich ein Ergebnis anstrebe, das dem Ergebnis von „Gruppieren nach“ sehr ähnlich ist, jedoch mit einer benutzerdefinierten Formel.
JSL einer Spaltenformel:
Spaltenmittelwert( :Parameter, :X )
Die Funktion „Gruppieren nach“ ist sehr praktisch für die Erstellung von Spaltenformeln aus integrierten Funktionen, aber wenn ich komplexere mathematische Berechnungen durchführen möchte, weiß ich nicht, wie ich den gleichen Gruppierungseffekt erzielen kann.
Der „Container“ ist eine (eindimensionale) „Matrix“.
Sie können die Matrix auch manuell erstellen:
myRows = Matrix ({1,2,3})
myRows = 1::3
myRows = [1, 2, 3]
Es gibt 2 Möglichkeiten, die Schnittmenge zu bilden (und andere Mengenoperationen wie Vereinigung und Differenz).
a) Verwendung assoziativer Arrays
aa1 = associative array (myRows1);
aa2 = associative array (myRows2);
aa1 << intersect(aa2);<BR />// aa1 << remove(aa2);
list of rows = aa1 << get keys;
rows= matrix(list of rows);

b) [Neu in JMP19]: Verwenden von Listen
list1 = as list (myRows1);
list2 = as list (myRows2);
<STRIKE>
list of rows = set intersect(list1, list2);
</STRIKE>
list of rows = set intersection(list1, list2);
//list of rows = set difference(list1, list2);
rows= matrix(list of rows);

Schnittmengen für Matrizen? Ich schätze: nein.
Hogi,
Du hast mich schon wieder gerettet. Danke!
Eine Klarstellung: Ich habe Ihre Syntax verwendet.
list of rows = set intersect(list1, list2);
Zuerst wurde es blau, also dachte ich, es wäre in Ordnung, aber es war seltsam, dass es nicht großgeschrieben wurde. Dann habe ich in der Skriptanleitung nachgeschlagen und festgestellt, dass es „Set Intersection“ heißt. Jetzt kann es losgehen. Prost!