Kumulierte Summe der Zeilen in der neuen Spalte nach verschiedenen Spaltendt = Current Data Table();
// List of column names for the table
col_names = dt << get column names( string );
// Create cumulative sum of each D
looking_for_channel_1 = "D";
For( i = 1, i <= N Items( col_names ), i++,
// search column names for "D"
If( Starts With( col_names[i], looking_for_channel_1 ),
new_col = dt << New Column( Char( col_names[i] ) || ">=",
Numeric,
.................................
);
);
);
Verehrte Gäste,
Ich bin ein neuer Scripter, der versucht, ein aktuelles Problem zu lösen. Ich bin mit der Syntax nicht sehr vertraut, möchte aber Spalten und Zeilen durchlaufen, um die kumulierte Summe für jedes Werkzeug und jede Zeile zu berechnen und das Ergebnis in einer neuen Spalte zu speichern. Ich habe eine Datentabelle beigefügt, die die Lösung zeigt.
Vielen Dank für Ihr Feedback.
BR
Martin
Betreff: Kumulierte Summe der Zeilen in der neuen Spalte nach verschiedenen SpaltenHier ist ein anderer Ansatz, bei dem die neuen Spalten einfach mithilfe von Formelspalten erstellt werden
Names Default To Here( 1 );
// This JSL assume the table contains only the Tool column,
// followed by the Dnnn columns. No cummulative columns have been
// created yet
dt = Current Data Table();
totCol = N Cols( dt );
// Loop across the columns creating the new cumulative sums
For( i = 2, i <= totCol, i++,
Eval(
Substitute(
Expr(
dt << New Column( __newname__, formula( __formula__ ) )
),
Expr( __newname__ ), Column( dt, i ) << get name || ">=",
Expr( __formula__ ),
If( i == 2,
Parse( Column( dt, i ) << get name ),
Parse(
"sum( :Name(\!"" || char( Column( dt, i - 1 ) << get name ) || ">=\!"), " || char( Column( dt, i ) << get name )
|| ")"
)
)
)
)
);Betreff: Kumulierte Summe der Zeilen in der neuen Spalte nach verschiedenen SpaltenIch habe einen anderen Ansatz zur Lösung Ihres Problems gewählt.Das Durchlaufen der Daten und das Sammeln der Daten, wie Sie es vorschlagen, wird bei vielen Spalten und Zeilen recht langsam.Die Verwendung integrierter JMP-Funktionen wird viel schneller sein.Unten sehen Sie ein Skript, das die Daten mithilfe der integrierten Funktion „Col Cumulative Sum()“ in eine große Datentabelle transponiert, um die Verarbeitung durchzuführen, und die Daten nach Abschluss der Verarbeitung wieder in das Breitformat transponiert.
names default to here(1);
dt=current data table();
// Transform the data into a long table from the current wide table
// to allow for faster processing using the built in column function
// col cumulative sum()
dtStack = dt << Stack(
columns( :D300, :D200, :D100, :D50, :D10 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Name( "Non-stacked columns" )(Keep( :Tool, :Column 13 ))
);
// Add a new column to insure an alphbetical ordering of the original
// data table
dtStack << New Column( "Row Number",
Character,
"Nominal",
Formula(
If( Lag( :Tool ) != :Tool,
counter = 0
);
counter = counter + 1;
result = Substr( "00", Length( Char( counter ) ) - 3 ) || Char( counter )
|| " " || :Label;
)
);
// Add the Cumulative Sum column
dtStack << New Column( "xx",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Col Cumulative Sum( :Data, :Tool ) ),
Set Selected
);
// Transpose the data back into a wide format
dtFinal = dtStack << Split(
Split By( :Row Number ),
Split( :Data, :Name( "xx" ) ),
Group( :Tool ),
Remaining Columns( Drop All ),
Sort by Column Property
);
// Close the nolonger needed stack data table
close(dtStack,nosave);
// Pass across the column names adjusting them back to the desired form
For( i = 2, i <= N Cols( dtFinal ), i++,
If(
Word( 1, Column( dtFinal, i ) << get name, " " ) == "Data",
Column( dtFinal, i ) << set name( Substr( Column( dtFinal, i ) << get name, 10 ) )
,
Word( 1, Column( dtFinal, i ) << get name, " " ) == "xx",
Column( dtFinal, i ) << set name( Substr( Column( dtFinal, i ) << get name, 8 ) || ">=" )
)
);