C'est cool que des fonctions personnalisées puissent être utilisées ainsi qu'une partie des formules personnalisées dans l'éditeur de formule.
Avec la commande Transformer Catégorie, le
New Custom Function( "myNamespace", "Add Ten", Function( {x, y = 10}, x + y ), << Transform Category( "Custom" ));depuis https://www.jmp.com/support/help/en/16.2/#page/jmp/create-custom-functions-transforms-and-formats.shtml
apparaîtra dans le menu du clic droit Nouvelle colonne de formule - et produira une colonne avec la formule

Je viens de commencer avec @txnelson l'approche
https://community.jmp.com/t5/Discussions/Formula-for-Number-of-Unique-Categories-in-Column/mp/55284/highlight/true#M31262
pour générer une colonne pour Compte Unique valeurs - mais au lieu de taper la formule, je voulais utiliser une fonction personnalisée.
La colonne de formule générée manuellement fonctionne, mais la colonne qui utilise la fonction personnalisée compte unique n'a pas.
Il échoue avec le message d'erreur

Il semble que x dans le par() l'expression n'est pas remplacée par le nom de la colonne.
Alors, utilisez Eval(Substitut() pour résoudre le problème ?
... mais comment?
Avec
Eval(Substitute(Expr(Summarize( values = by( _col_ ) )),Expr(_col_),Name Expr(x) ));
Je reçois

- parce que dans une formule de colonne :x est traité comme :x[row()]. Argh...
Dans le même ordre d’idées, je commence à me demander pourquoi cela fonctionne :

[NB : la ligne rouge en zigzag indique simplement à l'utilisateur que imprimer dans une formule de colonne n'est pas une bonne idée]
pourquoi Jmp sait-il qu'il doit envoyer obtenir des valeurs à la COLONNE :sexe et et non à :sexe[ligne()].
Et pourquoi revient-il réellement :sexe[ligne()] dans la deuxième ligne - et non dans la colonne :sexe ?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Add Custom Functions(
New Custom Function(
"custom",
"count unique",
Function( {x},
As Constant( Summarize( values = by( x ) ) );
N Items( values );
),
<<TRANSFORM category=""></TRANSFORM>
Bonjour @hogi ,
Je ne sais pas si c'est une approche intelligente, mais le script suivant fonctionne. J'ai utilisé la fonction d'insertion eval. J'espère que ça aide.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Add Custom Functions(
New Custom Function(
"custom",
"count unique",
Function( {x},
Eval( Parse( Eval Insert( "As Constant( Summarize( values = by( :^x^ ) ) )" ) ) );
N Items( values );
),
<<TRANSFORM category=""></TRANSFORM>hum, malheureusement, ça ne marche pas :

produit le message d'erreur :

Donc, comme avec
Substitute (..., Expr(_col_),Name Expr(x))
Je suppose que c'est parce qu'un appel de fonction pour que cela fonctionne doit être
custom:count unique( "sex" )
à la place si
custom:count unique( :sex )
Je viens de trouver une version antérieure (2018) de la même question :
Référence de colonne dans la fonction personnalisée
La réponse tout à fait définitive de Jmp Support TS-00063463
