Unterscheiden Sie zwischen der gesamten Spalte und der aktuellen ZeileHallo,
Ich habe Schwierigkeiten, eine einfache „enthält“-Formel umzusetzen. Hier ist ein Beispieldatensatz und eine Formel:

Hier ist der Text: Enthält(:Spalte 1, :Spalte 2)
Das Problem: Ich denke, es wird immer die aktuelle Zeile von Spalte 1 (ganz) überprüft. Ich möchte, dass die gesamte Spalte überprüft wird, nicht nur die aktuelle Zeile. Sie können sehen, dass sich E und B in Spalte 2 befinden, die Ausgabe besagt jedoch, dass der Teil im Ganzen nicht gefunden wird.
Wie kann ich ausdrücklich sagen, dass die gesamte Spalte überprüft werden soll und nicht nur die aktuelle Zeile der Spalte?
Vielen Dank!
Grundlegende Datenanalyse und ModellierungBetreff: Unterscheiden Sie zwischen der gesamten Spalte und der aktuellen ZeileHier ist eine Möglichkeit, das Problem zu lösen
As Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 );
Betreff: Unterscheiden Sie zwischen der gesamten Spalte und der aktuellen ZeileHallo @KevinBrunner ,
Ich denke, die naheliegendste Möglichkeit, Spalten (statt Zeilen) in JMP zu vergleichen, wäre die Verwendung von Tabellenverknüpfungen.
vielleicht so etwas
// New data table
// → Data Table( "Untitled" )
dt1 = New Table( "Untitled" );
dt1 << New Column("Column 1", Character, "Nominal", Set Values({"A", "B", "C", "D", "E"}));
// New data table
// → Data Table( "Untitled 2" )
dt2 = New Table( "Untitled 2" );
dt2 << New Column("Column 2", Character, "Nominal", Set Values({"A", "E", "F", "B", "H"}));
// Join data tables
// → Data Table( "Untitled 3" )
dt1 << Join(
With( dt2 ),
Match Flag( 1 ),
By Matching Columns( :Column 1 = :Column 2 ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 1 ),
Preserve main table order( 1 )
);
Dies kann auch durch Klicken statt durch Skripten erfolgen. wie im Bild unten

Betreff: Unterscheiden Sie zwischen der gesamten Spalte und der aktuellen ZeileVielleicht kann ich das Ziel noch etwas präzisieren.
In Spalte 3 möchte ich eine Funktion, die eine 1 zurückgibt, wenn die aktuelle Zeile in Spalte 2 gefunden wird überall in Spalte 1. In meinem Beispiel sollte Spalte 3 also 1, 1, 0, 1, 0 anzeigen. Weil das E und das B in diesen Zeilen in Spalte 1 zu finden sind.
Vielen Dank!
Betreff: Unterscheiden Sie zwischen der gesamten Spalte und der aktuellen ZeileIch habe es versucht. Es ist viel näher, aber nicht ganz das, was ich suche. Es zählt mehr als das, was ich suche. Es heißt, dass B 5 und E 2 ist. Ich brauche nur wahr oder falsch, 1 oder 0.

Betreff: Unterscheiden Sie zwischen der gesamten Spalte und der aktuellen ZeileAs Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 ) > 0;
Betreff: Unterscheiden Sie zwischen der gesamten Spalte und der aktuellen Zeile
... folgend @txnelson Zweiter Vorschlag:
https://community.jmp.com/t5/Discussions/Differentiate-between-entire-column-and-current-row/mp/675677/highlight/true#M86260
Alternative:
Local( {t0 = :Column 1 << get values}, Contains( t0, :Column 2 ) > 0 )was eine lokale Variable generiert:

die einmal berechnet und für jede Zeile verwendet wird.
Schlechter:
t0 = :Column 1 << get values;
Contains( t0, :Column 2 ) > 0;
Diese Version wird erhalten Die Werte immer wieder für jede einzelne Zeile.
Betreff: Unterscheiden Sie zwischen der gesamten Spalte und der aktuellen ZeileDanke nochmal für deine Hilfe.
Ich konnte den Code vereinfachen:
Enthält(:Spalte 1 << Werte abrufen, :Spalte 2) > 0;
Es macht genau das, was ich will. Vielleicht hilft Ihnen das in Zukunft.
Prost.
Betreff: Unterscheiden Sie zwischen der gesamten Spalte und der aktuellen ZeileSie können auch verwenden Als Konstante() Nur in der ersten Reihe auszuwerten
Names Default To Here(1);
row_count = 10000; // 100 000 starts getting slow
dt = New Table("test",
Add Rows(row_count),
New Column("Die X", Numeric, Nominal),
New Column("Die Y", Numeric, Nominal),<BR />invisible
);
dt << Begin Data Update;
For Each Row(dt,
:Die X = Random Integer(1, N Rows(dt));
:Die Y = Random Integer(1, N Rows(dt) * 2);
);
dt << End Data Update;
wait(0);
start = HP Time();
dt << New Column("Formula", Numeric, Nominal, Formula(
Contains(:Die X << Get Values, :Die Y) > 0;
));
dt << Run Formulas;
Show(HP Time() - start);
start = HP Time();
dt << New Column("Formula As Constant", Numeric, Nominal, Formula(
As Constant(x_m = :Die X << get values);
Contains(x_m, :Die Y) > 0;
));
dt << Run Formulas;
Show(HP Time() - start);
Betreff: Unterscheiden Sie zwischen der gesamten Spalte und der aktuellen ZeileUnd wie wäre es mit Tabellenaktualisierungen?
Wenn Jmp die Einträge in Spalte 1 aktualisiert, werden alle 3 Varianten aktualisiert – also scheint alles in Ordnung zu sein ...
Names Default To Here(1);
row_count = 10; // 100 000 starts getting slow
dt = New Table("test",
Add Rows(row_count),
New Column("col1", set each value(Random Integer(1, row_count))),
New Column("col2", set each value(Random Integer(1,row_count*2))));
wait(0);
New Column( "Formula", Formula( Contains( :col1 << Get Values, :col2 ) > 0 ));
New Column( "Formula with local variable", Formula( Local( {t0 = :col1 << get values()}, Contains( t0, :col2 ) > 0 ) ));
New Column( "Formula As Constant", Formula(As Constant( t_1 = :col1 << get values ); Contains( t_1, :col2 ) > 0));
:col1 << set each value(-10);
:col1[1] = :col2[1];
Betreff: Unterscheiden Sie zwischen der gesamten Spalte und der aktuellen Zeile... bis Sie es manuell versuchen.
Mich interessierte, ob das als konstant bemerkt das Update. Kein Problem hier.
Aber irgendwie überraschend gibt es ein Problem mit der Spalte „Formel“, mit dem ich eigentlich nicht gerechnet habe:
Nach einer ersten, korrekten Berechnung wird die Erste der berechneten Spalten funktioniert nicht mehr ordnungsgemäß und beginnt, die Spalteneinträge 1 zu 1 zu vergleichen !?!
(Mein Code ist korrekt, nicht wahr?)
Laut Jmp-Handbuch muss das erste Argument von enthält sein

Wie gut, dass es auch ein JSL-Symbol (wie t0) zulässt 
Aber mit einem komplizierteren Ausdruck scheint es nicht angenehm zu sein.
Betreff: Unterscheidung zwischen gesamter Spalte und aktueller ZeileJMP 19.0.4 -> die gleichen Probleme.