Re : Script pour convertir une chaîne d'une liste dans le corps d'une formule dans une nouvelle colonne.Dans cet exemple, toutes les "formules" ont un nom de colonne commençant après "(", vous pouvez donc le remplacer par "(:", puis utiliser Parse
Names Default To Here(1);
dtinit = Open("$SAMPLE_DATA/Bands Data.jmp");
dtfeat = New Table("features",
Add Rows(14),
New Column("Term",
Character,
"Nominal",
Set Property("ID Column", 1),
Set Values(
{"press speed", "(roller durometer-34.5151)*(anode space ratio-102.914)", "(proof cut-44.9671)*(blade pressure-30.8904)",
"(anode space ratio-102.914)*(chrome content-99.6164)", "(humidity-78.6849)*(press speed-1851.21)", "roller durometer",
"(roller durometer-34.5151)*(current density-39.0164)", "(humidity-78.6849)*(wax-2.4037)",
"(wax-2.4037)*(chrome content-99.6164)", "(viscosity-50.7836)*(press speed-1851.21)", "(wax-2.4037)*(hardener-0.96014)",
"(roughness-0.71969)*(current density-39.0164)", "(humidity-78.6849)*(ink pct-55.6473)",
"(blade pressure-30.8904)*(press speed-1851.21)"}
)
),
Set Label Columns(:Term)
);
dtfeat << New Column("interaction", Character, "Nominal", Formula(If(Starts With(:term, "("), :term, ""))) <<
Move Selected Columns({:interaction}, after(:term));
value = dtfeat:interaction << get values();
uniqueinteraction = Associative Array(value) << get keys;
For Each({uniq}, uniqueinteraction,
f_str = Substitute(uniq, "(", "(:");
If(IsMissing(f_str),
continue();
);
Eval(EvalExpr(
dtinit << New Column(uniq, Numeric, "Continuous",
Formula(Expr(Parse(f_str)))
)));
);
Insérer une expression dans une autre en utilisant Eval Insert, Eval Expr, Parse et Substitute
Re : Script pour convertir une chaîne d'une liste dans le corps d'une formule dans une nouvelle colonne.Remarquable. A fait l'affaire. Merci beaucoup.
Script pour convertir une chaîne d'une liste dans le corps d'une formule dans une nouvelle colonne.Suivre le processus d'identification de certaines colonnes en interaction après avoir utilisé la plateforme d'ajustement et recherché une interaction (factorielle...). Je veux utiliser le terme résultant (tel que cA*0.1+cB*0.3) de l'interaction comme point de départ pour créer automatiquement des formules de colonne à partir de ces termes. J'ai du mal à trouver un moyen d'utiliser le contenu d'une chaîne telle que "cA*0.1+cB*0.3" où cA et cB représentent les noms de 2 colonnes présentes dans une table pour construire de nouvelles formules.
La dernière partie du script crée la formule mais représente simplement le contenu de la chaîne au lieu d'évaluer son contenu.
Toute suggestion serait grandement appréciée.
Sébastien
names default to here(1);
clear log();
dtinit=Open( "$SAMPLE_DATA/Bands Data.jmp" );
// Make TableBox into a Data Table
// → Data Table( "Untitled 3" )
//terms tables resulting from a generalized regression taking into consideration term interaction.
dtfeat = New Table( "features",
Add Rows( 14 ),
New Column( "Term",
Character,
"Nominal",
Set Property( "ID Column", 1 ),
Set Values(
{"press speed", "(roller durometer-34.5151)*(anode space ratio-102.914)", "(proof cut-44.9671)*(blade pressure-30.8904)",
"(anode space ratio-102.914)*(chrome content-99.6164)", "(humidity-78.6849)*(press speed-1851.21)", "roller durometer",
"(roller durometer-34.5151)*(current density-39.0164)", "(humidity-78.6849)*(wax-2.4037)", "(wax-2.4037)*(chrome content-99.6164)",
"(viscosity-50.7836)*(press speed-1851.21)", "(wax-2.4037)*(hardener-0.96014)", "(roughness-0.71969)*(current density-39.0164)",
"(humidity-78.6849)*(ink pct-55.6473)", "(blade pressure-30.8904)*(press speed-1851.21)"}
)
),
Set Label Columns( :Term )
);
//Identifies interacting terms
// New column: interaction
dtfeat << New Column( "interaction", Character, "Nominal", Formula( If( Starts With( :term, "(" ), :term, "" ) ) ) <<
Move Selected Columns( {:interaction}, after( :term ) );
value = dtfeat:interaction << get values();
uniqueinteraction = Associative Array( value ) << get keys;
nvinteract = N Items( uniqueinteraction );
//Will create a column named after the interacting terms
//Should apply a formula based on the interacting terms
//However, not sure how to extract the string from the list 'uniqueinteraction' so that is it not seen as a string but rather as 'formula instruction' where some portion of the term is recognized as a column namealready present in the original table
For( i = 1, i <= nvinteract, i++,
dtinit << New Column( uniqueinteraction[i], Numeric, "Continuous", Format( "Best", 12 ), Formula( Eval( uniqueinteraction[i] ) )
Études de consommation et de marché