Es ist cool, dass benutzerdefinierte Funktionen sowohl als Teil benutzerdefinierter Formeln im Formeleditor verwendet werden können.
Mit dem Befehl „Kategorie transformieren“ wird die
New Custom Function( "myNamespace", "Add Ten", Function( {x, y = 10}, x + y ), << Transform Category( "Custom" ));aus https://www.jmp.com/support/help/en/16.2/#page/jmp/create-custom-functions-transforms-and-formats.shtml
wird im Rechtsklick-Menü „Neue Formelspalte“ angezeigt und erstellt eine Spalte mit der Formel

Ich habe gerade damit angefangen @txnelson 's Ansatz
https://community.jmp.com/t5/Discussions/Formula-for-Number-of-Unique-Categories-in-Column/mp/55284/highlight/true#M31262
um eine Spalte zu generieren Zählen Sie Einzigartig Werte - aber anstatt die Formel einzugeben, wollte ich eine benutzerdefinierte Funktion verwenden.
Die manuell generierte Formelspalte funktioniert, aber die Spalte, die die benutzerdefinierte Funktion verwendet zählen einzigartig nicht.
Es schlägt mit der Fehlermeldung fehl

Scheint, dass x in der von() Der Ausdruck wird nicht durch den Spaltennamen ersetzt.
Also, verwenden Eval(Substitute() um das Problem zu beheben?
... aber wie?
Mit
Eval(Substitute(Expr(Summarize( values = by( _col_ ) )),Expr(_col_),Name Expr(x) ));
Ich bekomme

- weil in einer Spaltenformel :x als :x[row()] behandelt wird. Argh...
In diesem Sinne frage ich mich, warum das funktioniert:

[Hinweis: Die rote Zick-Zack-Linie sagt dem Benutzer nur das drucken in einer Spaltenformel ist keine gute Idee]
Warum weiß Jmp, dass es senden muss? Werte erhalten zur SPALTE :Sex und und nicht :sex[row()].
Und warum kommt es tatsächlich zurück? :sex[row()] in der zweiten Zeile - und nicht in der Spalte :Sex ?
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>
Hallo @hogi ,
Ich bin mir nicht sicher, ob das ein kluger Ansatz ist, aber das folgende Skript funktioniert. Ich habe die Eval-Einfügefunktion verwendet. Ich hoffe, es hilft.
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>Hm, leider funktioniert es nicht:

erzeugt die Fehlermeldung:

Also das Gleiche wie bei
Substitute (..., Expr(_col_),Name Expr(x))
Ich vermute, das liegt daran, dass ein Funktionsaufruf erforderlich ist, damit es funktioniert
custom:count unique( "sex" )
stattdessen wenn
custom:count unique( :sex )
Ich habe gerade eine frühere (2018) Version derselben Frage gefunden:
Spaltenreferenz in benutzerdefinierter Funktion
Die ganz eindeutige Antwort vom Jmp-Support TS-00063463
