JSL pour convertir une formule en ses résultatsBonjour,
J'ai le code jsl suivant
dt << New Column( "I (%)", (:Mean * 100) );
qui prend une colonne (Moyenne), multiplie par 100 et crée une nouvelle colonne appelée I(%) avec la formule.
Je ne veux pas la formule mais juste le résultat du calcul dans la nouvelle colonne. Comment puis-je faire ceci?
Merci beaucoup.
Automatisation et scriptsÉtudes de consommation et de marchéPartager et communiquer les résultatsRe : JSL pour convertir une formule en ses résultatsMerci beaucoup.Re : JSL pour convertir une formule en ses résultatsMerci! Très clair.Re : JSL pour convertir une formule en ses résultatsMerci beaucoup, très utile.Re : JSL pour convertir une formule en ses résultatsCela sort peut-être un peu du sujet et je peux créer un autre article pour en discuter davantage...
Même si la documentation sert à définir chaque valeur (la documentation JMP n'est pas toujours exactement pertinente...) J'ai l'impression que c'est le moyen le plus simple de gérer des cas comme celui-ci. Vous pouvez facilement utiliser des « formules » compliquées avec Définir chaque valeur sans vous soucier de supprimer les formules ultérieurement. Avec Values(), les calculs peuvent devenir un peu plus difficiles à faire, voir mon exemple (je ne maîtrise certainement pas les matrices JSL, il existe donc probablement un moyen beaucoup plus simple de faire ce que j'ai fait dans mon exemple).
Exemple avec des formules, définissez chaque valeur et valeurs :
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
//With formulas
newCol = dt << New Column("Formula_simple", Numeric, Continuous, Formula(:height*:weight));
newCol << Delete Formula;
newCol = dt << New Column("Formula_ColMin", Numeric, Continuous, Formula(:height*ColMin(:weight, :sex)));
newCol << Delete Formula;
//With Set Each Value
newCol = dt << New Column("SetEach_simple", Numeric, Continuous, Set Each Value(:height*:weight));
newCol = dt << New Column("SetEach_ColMin", Numeric, Continuous, Set Each Value(:height * ColMin(:weight, :sex)));
//With Values
newCol = dt << New Column("Values_simple", Numeric, Continuous, Values((:height << get values) :*</img> (:weight<< get values)));
newCol = dt << New Column("Values_ColMin", Numeric, Continuous, Values(
Summarize(exg = By(:sex), exm = Min(:weight)); //get min values by group
m_val = J(N Rows(dt),1,1);//matrix for values
height_vec = :height << get values;
For(i = 1, i <= N Items(exg), i++, //loop to "fill" matrix for values
tempRows = Loc(:sex << get as matrix, exg[i]);
m_val[tempRows] = height_vec[tempRows] * exm[i];
);
m_val;
));Que fait Set Each Value en coulisse parce que cela semble fonctionner très bien ? La documentation devrait-elle être mise à jour pour inclure ce comportement ou une nouvelle fonction créée pour ce faire ? Cela pourrait briser un grand nombre de scripts si le comportement Définir chaque valeur devait être modifié.
Re : JSL pour convertir une formule en ses résultatsCe comportement est l’objectif prévu du message << Set Each Value tel qu’il est documenté.
Re : JSL pour convertir une formule en ses résultatsGlacière! J'avais supposé que chaque valeur devait être définie sur la même valeur.
Re : JSL pour convertir une formule en ses résultatsHee est un exemple simple utilisant Définir chaque valeur
names default to here(1);
dt=open("$SAMPLE_DATA\big class.jmp");
dt << new column("times100", numeric, continuous, set each value(:height*100));

Re : JSL pour convertir une formule en ses résultatsCe message n'est pas utile dans ce cas. Il est utilisé pour définir chaque ligne de la colonne cible sur la même valeur constante.

Re : JSL pour convertir une formule en ses résultatsCool!
Re : JSL pour convertir une formule en ses résultatsVous n’avez pas du tout besoin d’une formule. Je recommande de ne pas utiliser de formules de colonne lors de la création de scripts, sauf si vous souhaitez que les valeurs changent dynamiquement une fois le script terminé. Votre cas pourrait donc être résolu de cette façon :
dt << New Column( "I (%)", Numeric, Continuous, Values( (:Mean << Get Values) * 100) );
Re : JSL pour convertir une formule en ses résultatsEssayez d'utiliser <Re : JSL pour convertir une formule en ses résultats
Le wait(3) est juste pour que vous puissiez le regarder ; il n'est pas obligatoire après <
Vous pouvez également utiliser l'éditeur de formule pour effacer la formule pour obtenir le même effet.
Re : JSL pour convertir une formule en ses résultatsNamesDefaultToHere(1);
// Sample table
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Add a formula column
dt << NewColumn("BMI", Numeric, Continuous, Formula(:weight/(:height^2)));
// Make sure the formula is run
dt << runFormulas;
// Wait a little, then remove the formula
Wait(3);
Column(dt, "BMI") << deleteFormula;