So erstellen Sie eine Formelspalte, um das Maximum mehrerer Spalten zu ermitteln<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe mehrere Spalten mit numerischen Daten (siehe Beispiel unten) und möchte eine Formelspalte erstellen, um den Maximalwert für jede Zeile in den Spalten zu ermitteln.Jede Hilfe wäre dankbar.Danke schön!
Wert 1 Wert 2 Wert 3 Maximalwert (Ich würde die Formel in diese Spalte einfügen)
1 9 6 9
2 1 5 5
3 7 4 7
4 2 6 6
Betreff: So erstellen Sie eine Formelspalte, um das Maximum mehrerer Spalten zu ermittelnIch bin mir nicht sicher warum, aber der Txnelsons-Code hat bei mir nicht funktioniert.
Nach dem Debuggen musste ich die letzte Zeile ändern in:
namelist[ Loc( as list(maxes`), Max( maxes ) )[1] ];
jetzt scheint es zu funktionieren
Betreff: So erstellen Sie eine Formelspalte, um das Maximum mehrerer Spalten zu ermittelnHier ist ein einfaches Beispiel, das den Spaltennamen der Max-Spalte anzeigt
Names Default To Here( 1 );
// Open Data Table: semiconductor capability.jmp
// → Data Table( "semiconductor capability" )
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
dt << New Column( "Example",
character,
formula(
If( Row() == 1,
namelist = {"NPN1", "NPN2", "NPN3", "NPN4"}
);
maxes = [];
For( i = 1, i <= N Items( namelist ), i++,
maxes = maxes || Matrix( Column( namelist[i] )[Row()] )
);
If( Row() <= 5,
Show( maxes )
);
namelist[Loc( maxes, Max( maxes ) )[1]];
)
);
Betreff: So erstellen Sie eine Formelspalte, um das Maximum mehrerer Spalten zu ermittelnDas ist vielleicht kein Zufall, aber welche Spaltenformel würde nicht den der maximalen Spalte, sondern den der Spalte mit dem maximalen Wert ergeben?TIA
Betreff: So erstellen Sie eine Formelspalte, um das Maximum mehrerer Spalten zu ermitteln@txnelson Du bist ein Zauberer! Danke für die Hilfe.
Betreff: So erstellen Sie eine Formelspalte, um das Maximum mehrerer Spalten zu ermittelnDie Syntax, die Sie für Ihr Beispiel erstellt haben, wird nicht funktionieren. Was ich daraus jedoch gelernt habe, ist, dass Sie eine neue Spalte erstellen möchten, die den Maximalwert über eine Liste von Spalten hinweg enthält.Der in einer Formel angegebene Code, z
:a * 2 + :p</img>
muss als tatsächliche Literalzeichenfolge eingegeben werden, die für die Formel gewünscht wird.JMP führt keine Auswertung des JSL in der Formel durch, bevor es an die neu erstellte Spalte übergeben wird.Daher muss die Formel, die man verwenden möchte, vollständig verwirklicht werden.Und in Ihrem Code muss er dynamisch sein, was erfordert, dass die Formelanweisung in JSL erstellt und dann an die Formel übergeben wird.
Unten finden Sie ein Skript, das eine Möglichkeit zeigt, dies zu tun
names default to here(1);
dt = Current Data Table();
// The formula that needs to be passed into the new column JSL needs
// to look like
// Max( :NameA, :UniqueX, :Name bb )
// A literal string of ":NameA, :UniqueX, :Name bb" needs to be created
// and then plugged into the JSL and then executed
// ":NameA, :UniqueX, :Name bb" is just an illustration, what the
// make up of the string needs to be derived from the actual column
// names in the data table
FreqList = dt << get column names( string, numeric );
freqString = "";
// build the JSL in the form that is required for the formula
For( i = 1, i <= N Items( FreqList ), i++,
If(
Contains( FreqList[i], "Unique" ) == 1 |
Contains( FreqList[i], "Name" ) == 1,
If( i==1, delim = "", delim = ",");
freqString = freqString || delim || " :" || FreqList[i]
)
);
// Run the command, passing into the formula the command string developed above
Eval( Parse( "dt << New Column (\!"Freq\!", numeric, Formula( Max( " || freqString || " )));" ) );
Betreff: So erstellen Sie eine Formelspalte, um das Maximum mehrerer Spalten zu ermitteln@txnelson Ich habe ein ähnliches Problem. Wo ich das Maximum aus mehreren Spalten erhalten möchte. In meinem Beispiel habe ich eine Liste von Spalten namens FreqList. Das habe ich mit einer ähnlichen Formel erstellt wie:
dt = current data table();
FreqList = dt << get column names( string, numeric );
For( i = N Items( FreqList ), i >= 1, i--,
If( Contains( FreqList[i], "Unique" )== 0,
FreqList= Remove( FreqList, i, 1 ),
Contains( FreqList[i], "Name" )== 0,
FreqList = Remove( FreqList, i, 1 )
)
);
// Then I was thinking something like the following should work,
dt << New Column ("Freq", numeric, Formula(Col Max(FreqList)));Der manuelle Weg, den ich machen würde, wäre, eine neue Spalte mit dem Namen „Freq“ zu erstellen. Erstellen Sie dann eine Formel wie Maximum(:Freq1,:Freq2,:Freq3,FreqN), die eine neue Spalte mit der maximalen Häufigkeit basierend auf der Zeile erstellen würde.
Wie würde ich das in JSL machen?
Betreff: So erstellen Sie eine Formelspalte, um das Maximum mehrerer Spalten zu ermittelnDie Frage von @adampaulsmith und beantwortet von @pmroz verwendet die Maximum()-Funktion in einer Formeldefinition für die resultierende Spalte.Die Formel durchläuft automatisch jede Zeile und wendet die Formel an.Somit muss kein Zeilenbezug hergestellt werden.
Wenn Sie dies jedoch in offenem JSL verwenden, können Sie den Spaltenverweisen einen Index hinzufügen, um anzugeben, welche Zeile Sie verarbeiten.
For( theRow = 1, theRow <= 10, theRow++,
:MaxValue[theRow] = Maximum( :Value 1[theRow], :Value 2[theRow], :Value 2[theRow] );
);
Weitere Informationen finden Sie in der Dokumentation zu JSL im Scripting Guide
Hilfe==>Bücher==>Skripthandbuch
Betreff: So erstellen Sie eine Formelspalte, um das Maximum mehrerer Spalten zu ermittelnWenn Sie viele Zeilen durchsuchen möchten, gibt es eine Funktion, mit der Sie einen Zeilenbereich auswählen können, anstatt jede Zeile in die Funktion einzugeben?
Betreff: So erstellen Sie eine Formelspalte, um das Maximum mehrerer Spalten zu ermittelnDanke ! Ich wusste, dass es etwas Einfaches sein musste.
Betreff: So erstellen Sie eine Formelspalte, um das Maximum mehrerer Spalten zu ermittelnDer Maximum()-Funktion werde dies für Sie tun.
Maximum(:Value 1, :Value 2, :Value 3)