Créer/ajouter de nouvelles colonnes à l'aide de verbesSalut les gars, je m'excuse pour le titre déroutant. Je ne savais pas comment le formuler.
Ma question est : j'ai un code dans lequel j'ajoute de nouvelles colonnes en utilisant des conditions longues.
Les conditions sont les mêmes pour toutes les colonnes, à l'exception d'un paramètre qui change.
Existe-t-il un moyen, au lieu d'écrire à chaque fois le code complet et les conditions avec la nouvelle valeur du paramètre, de créer un modèle (comme une fonction) que j'utiliserai une variable à la place du paramètre auquel j'enverrai à chaque fois la valeur nécessaire pour les conditions de la nouvelle colonne ?
Automatisation et scriptsAnalyse et modélisation de données de baseRe: Créer/ajouter de nouvelles colonnes à l'aide de veriblesVous pouvez utiliser des fonctions ou des expressions pour quelque chose comme ceci
https://www.jmp.com/support/help/en/18.0/#page/jmp/advanced-expressions-macros-and-lists.shtml#ww339382
https://www.jmp.com/support/help/en/18.0/#page/jmp/advanced-functions.shtml#
Insérer une expression dans une autre à l'aide de Eval Insert, Eval Expr, Parse et Substitute
Re: Créer/ajouter de nouvelles colonnes à l'aide de veriblesPas besoin d'écrire de code.
Depuis JMP 18, c'est super facile - il suffit de jeter un œil à Discussions/Formule/ - fonctionnalité n°3.
En bref:
Sélectionnez les colonnes que vous souhaitez utiliser comme entrée, puis faites un clic droit sur un en-tête de colonne et cliquez sur
nouvelle colonne de formule / 
En dernière étape, saisissez votre formule et cliquez sur 
[J'ai sélectionné 128 colonnes, donc créez 128 .
Si vous avez sélectionné N colonnes, cela créera N colonnes : )
Re: Créer/ajouter de nouvelles colonnes à l'aide de veriblesSi vous souhaitez utiliser exactement la même formule encore et encore via le nouveau menu contextuel de formule, vous pouvez créer votre propre « fonction personnalisée » et activer l'option Transformer la catégorie pour la faire apparaître dans le menu.
Après un redémarrage, le code doit être à nouveau exécuté, alors incluez-le dans un AddIn ou dans vos scripts de démarrage.
Names Default To Here( 1 );
myAdd =
New Custom Function(
"custom",
"Add",
Function( {x, y = 1},
x + y - 1
)
);
myAdd << Transform Category( 1 );à partir de l'index de script :

Mais cette approche est très « statique ». Pour avoir la possibilité de modifier un paramètre, il faut voter ici :
Nouveau menu de colonne de formules : mini-interfaces graphiques définies par l'utilisateur
Re: Créer/ajouter de nouvelles colonnes à l'aide de veriblesVoici un exemple de fonction qui va additionner un nombre. Il manque quelques vérifications pour être une « bonne » fonction, mais elle fournit l'idée nécessaire que les valeurs qui pourraient changer (nom de colonne et nombre à additionner dans ce cas) doivent être évaluées (voir Insérer une expression dans une autre... que j'ai mentionné plus tôt)
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
cols = {"height", "weight"};
add_num_to_col = Function({dt, colname, num_to_add}, {Default Local},
new_col = Eval(EvalExpr(
dt << New Column(colname || " add " || char(num_to_add), Numeric, Continuous, Formula(
Expr(NameExpr(AsColumn(dt, colname))) + Expr(num_to_add)
));
));
return(new_col);
);
col1 = add_num_to_col(dt, "height", 10);
col2 = add_num_to_col(dt, "height", 20);
col3 = add_num_to_col(dt, "weight", 5);
Write();
Parfois, l'utilisation de Eval(Substitute()) est une solution plus propre et plus facile à comprendre et elle pourrait ressembler à ceci
add_num_to_col = Function({dt, colname, num_to_add}, {Default Local},
new_col = Eval(Substitute(
Expr(dt << New Column(colname || " add " || char(num_to_add), Numeric, Continuous, Formula(
_colname_ + _num_to_add_
))),
Expr(_colname_), Name Expr(AsColumn(dt, colname)),
Expr(_num_to_add_), num_to_add
));
return(new_col);
);Re: Créer/ajouter de nouvelles colonnes à l'aide de veriblesUne combinaison des approches précédentes - avec une petite touche supplémentaire :
- créer une fonction personnalisée *)
- ajoutez-le à une catégorie de formule
- faites un clic droit sur un en-tête de colonne et cliquez sur nouvelle colonne de formule /

- utiliser la nouvelle formule
- ... et entrez le paramètre manuellement :

*)
Add Custom Functions(
New Custom Function(
"custom",
"add++",
Function( {column, num_to_add},
{Default Local},
column,
num_to_add
),
<<FORMULA category=""></FORMULA>The benefit: the user can enter specific parameters for every new column.
The disadvantage: no <STRONG><EM>lot</EM> </STRONG>mode like in the previous posts.<BR /><BR />kind of disadvantage: JMP doesn't <EM>résoudre/remplacer</EM> the formula, it keeps it as <FONT face="courier new,courier">ajouter++(...)</FONT>.<BR /> To keep it alive the formula definition has to be executed again after a restart of JMP - and maybe: shared with colleagues.
Re: Créer/ajouter de nouvelles colonnes à l'aide de veriblesMerci à tous pour l'aide.
J'ai un nouveau problème connexe que quelqu'un peut peut-être m'expliquer.
J'ai utilisé la méthode suivante pour supprimer les lignes sans données dans une colonne spécifique :
dt << select where( est manquant( Colonne( dt, col_name )[row()] ));
*En conséquence, il supprime les lignes correctes, mais en même temps, il supprime les valeurs de la colonne. Quelqu'un peut-il m'indiquer l'erreur ?
Ci-joint le script lui-même :
Re: Créer/ajouter de nouvelles colonnes à l'aide de veriblesNames Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col_name="x";
New column(col_name); // maybe another column with the same name?
new_col = New column(col_name, Formula(if(:height>60,1 )));
// get the correct column name - uncomment to make it work
//col_name = new_col << get name();
dt << select where( Is missing( Column( dt,col_name )[row()] ));
wait(1);
dt << delete rows;
Re: Créer/ajouter de nouvelles colonnes à l'aide de veriblesJe ne recommande pas d'utiliser des chaînes de caractères pour faire référence à des colonnes. Il arrive si souvent que la colonne réelle soit créée en ajoutant un « 2 » - et la chaîne mènera à une autre colonne.
Lorsque vous générez la colonne, vous obtenez un handle pour la colonne. Utilisez simplement ce handle - et il vous guidera vers la bonne colonne :
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col_name="x";
new_col = New column(col_name, Formula(if(:height>60,1 )));
dt << select where( Is missing( new_Col[] ));
Re: Créer/ajouter de nouvelles colonnes à l'aide de veriblesJe n'aime pas non plus le [] pour remplacer la colonne Column (col_name) par la valeur actuelle As column(col_name) .
:col peut faire les deux - et j'ai appris de @jthi :
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col_name="x";
new_col = New column(col_name, Formula(if(:height>60,1 )));
myCol = Name Expr(As Column(new_col)); // very cool trick (c) Jarmo
Show(Name Expr(myCol));
dt << select where( Is missing( myCol ));