So erhalten Sie Maximalwerte über mehrere Spalten hinweg mit fehlenden Daten in den Zeilen!Hallo,
Nehmen wir an, wir haben einen Datensatz, für den wir maximale Werte für die ausgewählten Spalten erhalten möchten
dt = New Table( "Untitled",
New Column( "a@b;2", Numeric, Set Values( [12, 33, 1] ) ),
New Column( "b", Numeric, Set Values( [2, 11, 2] ) ),
New Column( "c@d;3", Numeric, Set Values( [333, 1, 0] ) )
);
colnames = dt << getcolumnnames;
use_cols = {};
include = {"@"};
For( j = 1, j <= N Items( include ), j++,
For( i = 1, i <= Nitems( colnames ), i++,
If(Contains(colnames[i], include[j]),
insert into (use_cols , colnames[i]))
));
dt << new column("max_col",numeric,formula(Maximum(use_cols)))
Ich verstehe nicht, warum in max_col ein fehlender Wert zurückgegeben wird? Sollten wir die use_cols durchlaufen?
Danke!
Datenmischung und -bereinigungBetreff: So erhalten Sie Maximalwerte über mehrere Spalten hinweg, wenn in den Zeilen Daten fehlen!Entschuldigung! das hat nicht geklappt!Betreff: So erhalten Sie Maximalwerte über mehrere Spalten hinweg, wenn in den Zeilen Daten fehlen!Danke txnelson für deine tolle Lösung! Du bist immer hilfreich, wenn es darum geht, ins Detail zu gehen und die Dinge sehr klar zu erklären!Betreff: So erhalten Sie Maximalwerte über mehrere Spalten hinweg, wenn in den Zeilen Daten fehlen!Auf einem Windows-PC mit Windows 10 habe ich mehrere Versionen von JMP überprüft und Ihr Skript ausgeführt, und es lief auf allen Versionen korrekt.

Ihre zweite Einschränkung, dass in Ihren Daten manchmal Werte fehlen, sollte kein Problem darstellen.Die Funktion Maximum() behandelt fehlende Werte.
Da ich nicht mehr über Ihr Skript weiß, werde ich auf ein mögliches Problem hinweisen.Wenn Sie sich die Formel ansehen, die für die Spalte max_col erstellt wird, sehen Sie:

Die Formel basiert auf der Liste „use_cols“. Jedes Mal, wenn die Formel ausgeführt oder erneut ausgeführt wird, geht sie zur Liste, verwendet den Wert „zu diesem Zeitpunkt“ von „use_cols“ und fügt ihn in die Formel ein.Wenn der Wert von „use_cols“ „ist“ {Name( "a@b;2" ), Name( "c@d;3" )} ", alles wird gut funktionieren.Wenn sich aus irgendeinem Grund der Wert der Liste „use_cols“ geändert hat, funktioniert die Formel möglicherweise nicht und Sie erhalten fehlende Werte.Was Sie wirklich wollen, ist, dass die Formel so ist
Maximum( {:Name( "a@b;2" ), :Name( "c@d;3" )} )
Der einfachste Weg, dies zu tun, besteht meiner Erfahrung nach darin, die neue Spalte und Formel wie folgt anzugeben:
Eval(Parse("dt << new column(\!"max_col\!",numeric,formula( Maximum(" || char(use_cols) || ")));"));
Dies führt dazu, dass die Formel wie folgt angegeben wird:

Betreff: So erhalten Sie Maximalwerte über mehrere Spalten hinweg, wenn in den Zeilen Daten fehlen!Hallo,
Sie müssen JMP lediglich dabei helfen, herauszufinden, dass sich die Variable „use_cols“ auf Spalten bezieht, indem Sie „as columns“ zu Ihrer letzten Anweisung hinzufügen:
dt << New Column( "max_col", numeric, formula( Maximum( as columns( use_cols ) ) ) );
Betreff: So erhalten Sie Maximalwerte über mehrere Spalten hinweg, wenn in den Zeilen Daten fehlen!Ich habe vergessen, manchmal auch Spalten hinzuzufügen, die fehlende Werte enthalten. Beim Erstellen der Datentabelle konnte ich nicht herausfinden, wie ich sie hinzufügen sollte.