Comment puis-je mettre à l'échelle des colonnes par rapport à une autre colonne ?Bonjour, j'ai un tableau qui ressemble à ceci : quelques colonnes nominales et de nombreuses colonnes numériques.

Je souhaite créer une nouvelle table « table_scaled » dont les colonnes nominales sont copiées et dont le nombre de colonnes (N(#)) est divisé par le nombre de lignes (N rows) et multiplié par 100 pour obtenir un pourcentage. J'ai essayé ce code, mais j'obtiens une table vide avec une seule colonne vide. Auriez-vous une suggestion ?
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) )
)
)
);
Automatisation et scriptageAccès aux donnéesPersonnalisation de masseIngénierie de la qualité et des procédésRe : comment mettre à l'échelle des colonnes par une autre colonnePourriez-vous fournir un exemple avec des valeurs correctes sur la façon dont vous voulez que la table finale ressemble ? Peut également fournir la table de données qui pourrait être utilisée pour développer le script (supprimer le script source et anonymiser si nécessaire) car l'image de la table ne peut pas être utilisée pour cela.
Re : comment mettre à l'échelle des colonnes par une autre colonneSalut Jarmo,
Merci, bien sûr. J'ai joint un résumé qui est le tableau de départ et summary_scaled est ce que je voudrais scripter.
Re : comment mettre à l'échelle des colonnes par une autre colonneSi vous avez JMP16 + voici une 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)))
);
Si vous avez un JMP plus ancien, vous devrez remplacer For Each par la boucle For.