Suche nach dem Maximalwert jeder Zeile über mehrere Spalten hinweg und nach dem Namen der QuellspalteHallo,
Ich versuche, ein JSL-Skript zu erstellen, das den Maximalwert jeder Zeile und den Spaltennamen ermitteln kann, der dem Maximalwert entspricht. Ich konnte den Maximalwert für alle Spalten ermitteln, benötige jedoch einen Rat, um den Spaltennamen zu finden, der dem Maximalwert entspricht
Hier ist der Code:
Names Default To Here( 1 );
dt = Current Data Table();
dt << Select Columns( 2 :: 14 );
col = dt << Get Selected Columns( );
val = dt:MaxVal << get values( Format( "Best", 12 ) );
dt:Maximum Value << Set Formula( Max(col) );
nc = (N Items( col ));
For( j = 1, j <= N Items( val ), j++,
xxx = {};
For( i = 1, i <= nc, i++,
If( Contains( char(col[i]), val[j] ),
Insert Into( xxx, char(col[i]) )
)
);
Column( dt, 16 )[j] = xxx;
);
Automatisierung und SkripterstellungBetreff: Suche nach dem Maximalwert jeder Zeile über mehrere Spalten hinweg und nach dem Namen der Quellspaltedt << new column("MaxVal Column", character, set each value(char( col[loc(As List(matrix(col)),:MaxVal)[1] ])));Schlagen Sie die obige Korrektur für die letzte Zeile zumindest für JMP14 vor: Die Matrix (Spalte) gibt eine Matrix zurück und die Loc-Funktion benötigt eine Liste als erstes Argument, daher muss die Matrix in eine Liste mit „Als Liste“ umgewandelt werden.
Betreff: Suche nach dem Maximalwert jeder Zeile über mehrere Spalten hinweg und nach dem Namen der QuellspalteHier ist eine andere Möglichkeit, das Problem zu lösen
Names Default To Here( 1 );
dt = Current Data Table();
dt << Select Columns( 2 :: 14 );
col = dt << Get Selected Columns( );
dt << new column("MaxVal", set each value(Max(col)));
dt << new column("MaxVal Column", character, set each value(char(col[loc(matrix(col),:MaxVal)[1]])));
Betreff: Suche nach dem Maximalwert jeder Zeile über mehrere Spalten hinweg und nach dem Namen der QuellspalteIch hatte ein sehr seltsames Skript kopiert und nun bearbeitet, um eines zu korrigieren
Betreff: Suche nach dem Maximalwert jeder Zeile über mehrere Spalten hinweg und nach dem Namen der Quellspalte@jthi Danke. Ihr Code findet anscheinend den Maximalwert über die Spalte hinweg und ich möchte den Maximalwert jeder Zeile über mehrere Spalten hinweg auswerten. Ich erwarte folgende Ergebnisse

Betreff: Suche nach dem Maximalwert jeder Zeile über mehrere Spalten hinweg und nach dem Namen der QuellspalteEs gibt viele Möglichkeiten, dies zu tun. Unten ist ein Beispiel, das Ihnen das liefern sollte, was Sie brauchen:
Names Default To Here(1);
dt = Open("$DOWNLOADS/Sample data.jmp");
col_names = (dt << Get Column Names("String"))[2::(N Cols() - 2)];
m = dt[0, col_names];
Column(dt, "Maximum Value") << Set Values(V Max(m`));
Column(dt, "Maximum Col Name") << Set Data Type("Character");
Column(dt, "Maximum Col Name") << Set Each Value(
max_idx = Loc(m[Row(), 0], :Maximum value)[1];
col_names[max_idx];
);
Bearbeiten: Kopieren Sie das richtige Skript und fügen Sie es ein
Edit2: Zweite recht ähnliche Option:
Names Default To Here(1);
dt = Open("$DOWNLOADS/Sample data.jmp");
Column(dt, "Maximum Col Name") << Set Data Type("Character");
col_names = (dt << Get Column Names("String"))[2::(N Cols() - 2)];
Column(dt, "Maximum Value") << Set Each Value(Max(dt[Row(), col_names]));
Column(dt, "Maximum Col Name") << Set Each Value(
// could use loc max, but as we need maximum value in column, we can just use that with Loc
max_idx = Loc(dt[Row(), col_names], :Maximum value)[1];
col_names[max_idx];
);Betreff: Suche nach dem Maximalwert jeder Zeile in mehreren Spalten und dem Namen der QuellspalteDanke dafür, Jim! Habe das gerade bei 250 Spalten verwendet. Hoffe, es geht dir gut.
Ich bin jetzt weit weg von Texas. Karte .