Wie skaliere ich Spalten anhand einer anderen Spalte?Hallo, ich habe eine Tabelle, die folgendermaßen aussieht: einige nominale Spalten und dann viele numerische Spalten.

Ich möchte eine neue Tabelle namens „table_scaled“ erstellen, in der die nominalen Spalten kopiert und die Anzahl der Spalten (N(#)) durch die Anzahl der Zeilen (N rows) geteilt und mit 100 multipliziert wird, um einen Prozentwert zu erhalten. Ich habe folgenden Code ausprobiert, erhalte aber nur eine leere neue Tabelle mit einer leeren Spalte. Hat jemand eine Idee, woran das liegen könnte?
dt = Current Data Table();
NewTable("HOT_COLD_summary_scaled",
For( i = 1, i <= N Cols( HOT_COLD_summary ), i++,
dt << New Column(
Column( i ) << get name,
Numeric,
"Continuous",
Formula( (:column( i )*100) /(HOT_COLD_summary:N rows) )
)
)
);
Automatisierung und SkripterstellungDatenzugriffMassenanpassungQualitäts- und ProzessentwicklungBetreff: Wie skaliere ich Spalten um eine andere Spalte?Können Sie ein Beispiel mit korrekten Werten dafür geben, wie die Abschlusstabelle aussehen soll? Kann auch die Datentabelle bereitstellen, die für die Entwicklung des Skripts verwendet werden könnte (Quellskript entfernen und bei Bedarf anonymisieren), da das Bild der Tabelle dafür nicht verwendet werden kann.
Betreff: Wie skaliere ich Spalten um eine andere Spalte?Hallo Jarmo,
Danke, sichere Sache. Ich habe eine Zusammenfassung angehängt, die die Starttabelle ist, und summary_scaled ist das, was ich schreiben möchte.
Betreff: Wie skaliere ich Spalten um eine andere Spalte?Wenn Sie JMP16+ haben, ist hier eine Option
Names Default To Here(1);
dt = Open("$DOWNLOADS/summary.jmp");
dt_copy = dt << Subset(All Rows, Selected Columns(0), Output table("summary_scaled"));
close(dt, no save);
col_list = dt_copy << Get Column Names("String");
// first col isn't needed, second col is expected to be N Rows -> skip those
cols_of_interest = Remove(col_list, 1,2);
For Each({ncol}, cols_of_interest,
new_col = Eval(EvalExpr(
dt_copy << New Column(ncol ||"_scaled%", Numeric, Continuous, Formula(
100*Expr(Name Expr(AsColumn(ncol))) / :"N Rows"n
))
));
dt_copy << Move Selected Columns({new_col}, after(Eval(ncol)))
);
Wenn Sie ein älteres JMP haben, müssen Sie For Each durch eine For-Schleife ersetzen.