Äquivalent zur V-Suche in einer einzelnen SpalteHallo zusammen,
Ich habe also eine Formel verwendet, die auf die gleiche Weise wie die SVERWEIS-Funktion in Excel funktioniert, habe jetzt aber festgestellt, dass sie bei größeren Datentabellen nicht funktioniert, da sie JMP im Grunde blockiert und zerstört.
Anbei finden Sie eine Beispieldatentabelle, in der ich die beiden von mir kombinierten Funktionen aufgeteilt habe, was wie erwartet funktioniert:

VLU-Artikel

VLU-Ergebnis

Wenn ich die Formel aus der Spalte „VLU-Element“ in die Formel für die VLU-Ergebnisse einfüge, führt dies zu einer Todesspirale. Zwei separate Spalten sind kein Problem, aber es wäre übersichtlicher, wenn ich dies in einer Formel tun könnte.
Danke für alle Ideen!!
Steve
Datenzusammenführung und -bereinigungBetreff: Äquivalent zur V-Suche in einer einzelnen SpalteMit der Einführung der schicken neuen Col Aggregation wurden einige Geschwindigkeitsprobleme in JMP19 behoben:
Neu im Graph Builder für JMP 19
dieses auch : )
Betreff: Äquivalent zur V-Suche in einer einzelnen SpalteEine weitere Möglichkeit, eine VLookup-Funktion in JMP durchzuführen, ist die Verwendung der Update-Plattform. Diese ist sehr effizient. Die Lookup-Werte müssen sich zwar in einer separaten Tabelle befinden, für Ihre Datentabelle ist dies jedoch ein einfacher Vorgang. Hier ist ein Skript, das die Lookup-Funktion sehr schnell durchführt.
Names Default To Here( 1 );
dt = Current Data Table();
// Select matching cells
dt << Select Where( :VALUE_STR == "" );
// Invert current selection
dt << Invert Row Selection;
// Subset data table
// → Data Table( "Subset of Vlookup example" )
dt << Select Where( :VALUE_STR == "" );
dt << Invert Row Selection;
dtSum = dt << Subset(
Selected Rows( 1 ),
columns( :HEADER_ID, :VALUE_STR ),
output table( "Lookup" )
);
// Change column name: VALUE_STR → VLU Result from UPdate
dtSum:VALUE_STR << Set Name( "VLU Result from UPdate" );
// Update data table
dt << Update(
With( Data Table( dtSum ) ),
Match Columns( :HEADER_ID = :HEADER_ID )
);
// Remove Lookup table
Close( dtSum, nosave );
Betreff: Äquivalent zur V-Suche in einer einzelnen Spalte
@shampton82 schrieb:
Wenn ich die Formel aus der Spalte „VLU-Element“ nehme und sie in die Formel für die VLU-Ergebnisse einsetze, würde dies eine Todesspirale verursachen.
Es fühlt sich tatsächlich wie eine Todesspirale an – aber bei näherem Hinsehen ist es eine Spirale extremen Kaffeekonsums.
Und es zeigt Ihnen, wie oft JMP Spaltenformeln neu berechnet!
Das Problem wird verursacht durch
Col Maximum(if (String comparison ))
Neben dem Verzicht auf die Idee einer Spaltenformel gibt es für JMP < 19 noch weitere Problemumgehungen:
- DON'T use a string comparison, convert the string to a number:
:VALUE_STR[Col Maximum( If( :X__3 == 3.1, Row(), . ), :HEADER_ID )]
Tipps und Tricks – Best Practice mit JMP/JSL
- ... or use Enthält()
:VALUE_STR[Col Maximum( If( contains(:X__3 , "V3_1"), Row(), . ), :HEADER_ID )]
- DON'T use max() to "distribute" a single value in groups
... col median() is much faster:
:VALUE_STR[Col Median( If( :X__3 == "V3_1", Row(), . ), :HEADER_ID )]
Betreff: Äquivalent zur V-Suche in einer einzelnen SpalteDanke @txnelson !
Ich wollte es als Formelspalte behalten, aber ich werde es auch in der Hinterhand behalten.
Betreff: Äquivalent zur V-Suche in einer einzelnen SpalteDanke @hogi !
Mir gefällt deine Analogie besser. Auch dein Vorschlag, COLMEDIAN() zu verwenden, hat perfekt funktioniert. Verrückt, dass die beiden Funktionen so unterschiedliche Leistungen haben. Ein weiterer Grund, sich auf die baldige Installation von Version 19 zu freuen.
Betreff: Äquivalent zur V-Suche in einer einzelnen SpalteIch habe auch eine Lösung gefunden, die auf einem assoziativen Array basiert
As Constant(
Summarize( bygp = by( :HEADER_ID, :VALUE_STR ) );
aa = Associative Array( bygp[1], bygp[2] );
);
Parse( Eval( Parse( "aa[\!"" || Char( :HEADER_ID[Row()] ) || "\!"]" ) ) );
Betreff: Äquivalent zur V-Suche in einer einzelnen SpalteWow!
- Zusammenfassen mit einer 2-dimensionalen Gruppe *)
- ... in ein assoziatives Array eingespeist, um die fehlenden Einträge zu entfernen:
Summarize sortiert die Einträge, fehlende kommen zuerst - und werden mit dem zweiten Paar überschrieben
- Beschleunigung durch Verwendung von Als Konstante
noch kürzer:
As Constant(
Summarize( bygp = by( :HEADER_ID, :VALUE_STR ) );
aa = Associative Array( bygp[1], bygp[2] );
);
aa[Char( :HEADER_ID[Row()] )];
*) wichtig: Summarize speichert Strings (auch für numerische Spalten)
-> aa[char( Zahl )]