Divisez votre problème en plus petites parties. Commencez par quelque chose de très simple comme (ma syntaxe peut ne pas fonctionner pour JMP14 car j'utilise JMP17)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Variability Data/2 Factors Crossed.jmp");
yname = "namechange";
col_name = "Measurement";
var_chart = Variability Chart(
Y(Transform Column(yname, Formula(colname))),
X(:Operator, :part#)
);
Vous pouvez déjà avoir vos problèmes avec ce type de script, mais il est beaucoup plus facile de tester avec quelque chose comme ça.
Avec un script comme celui-ci, je recourrais très probablement à l'utilisation d'Eval(EvalExpr()) car cela me permet de faire quelque chose comme ci-dessous (je peux voir l'expression qui sera évaluée si je lance juste la partie EvalExpr())

Si vous utilisez Transform uniquement pour renommer la colonne de l'axe Y, il peut y avoir des options plus simples que d'utiliser Transform Column.
Une fois que vous avez fait fonctionner cette partie, il est temps de commencer à vous attaquer aux filtres ou à la mise à l'échelle, mais ne les faites pas en même temps.
Merci pour la réponse. J'ai déjà validé individuellement tous les autres composants du code, je n'étais donc pas préoccupé par la complexité supplémentaire.
Le premier extrait de code que vous avez publié ne fonctionne pas dans JMP14. Le message d'erreur est "Une colonne du groupe By ne contient aucune donnée, car toutes les lignes ont des valeurs manquantes ou sont exclues.
J'ai trouvé une solution en enveloppant l'appel de la fonction du graphique de variabilité avec Eval(EvalExpr()), puis en enveloppant le nom de la colonne à l'intérieur de la transformation dans Expr(Name Expr(AsColumn())).
Les éléments suivants fonctionneront dans JMP 14
Names Default To Here( 1 );
dt = Open(
"$SAMPLE_DATA/Variability Data/2 Factors Crossed.jmp"
);
yname = "namechange";
col_name = "Measurement";
Variability Chart(
Y( Transform Column( yname, Formula( as column(col_name)) ) ),
X( :Operator, :part# )
);
Très simplement, j'essaie de modulariser certains graphiques de variabilité. Au total, il y a 3 à 4 paramètres différents pour lesquels je souhaite tracer ces graphiques, je dois donc transmettre une clé à la fonction pour lui indiquer la colonne à tracer et la laisser configurer une gestion spécifique de cette colonne. À savoir, quel type de transformation cette colonne doit subir dans le cadre de l’opération de tracé.
La façon dont j'ai commencé est de transmettre une chaîne, puis d'utiliser un ensemble de conditions pour spécifier le nom de la colonne à transformer (colname), puis la chaîne à appliquer à la transformation (yname).
J'ai essayé plusieurs méthodes pour ce faire et quelle que soit la solution que j'utilise, je n'arrive pas à faire fonctionner l'intrigue correctement. Le codage en dur du Y du graphique de variabilité fonctionne toujours correctement pour les filtres donnés, donc je sais qu'il y a des données présentes, je n'arrive tout simplement pas à les sélectionner en utilisant mon approche variable. Voici ce que j'ai essayé jusqu'à présent pour la ligne Y du graphique var :
- Y( Transform Column( yname, Formula( Column(colname) ) ) ),
- Alerte JMP : Argument invalide (boîte de dialogue)
- Le groupe n'a pas de données car toutes les lignes ont des valeurs manquantes ou sont exclues (fenêtre de journal)
- Y( Transform Column( yname, Formula( Column(dt,colname) ) ) ),
- Alerte JMP : Argument invalide (boîte de dialogue)
- Le groupe n'a pas de données car toutes les lignes ont des valeurs manquantes ou sont exclues (fenêtre de journal)
- Y( Transformer la colonne ( yname, Formula ( Column ( As Column (colname)) ) ) ),
- Alerte JMP : Colonne non résolue 256 fois (boîte de dialogue)
- "Argument invalide 256 fois. Une colonne ou un groupe ne contient aucune donnée car toutes les lignes ont des valeurs manquantes ou sont exclues (log)
- Y( Transformer la colonne ( yname, Formula ( Column ( As Column (dt, colname)) ) ) ),
- Alerte JMP : L'accès aux tables de données étendues nécessite une colonne ou une variable de table de données 256 fois (boîte de dialogue)
- Argument invalide 256 fois. Une colonne ou un groupe ne contient aucune donnée car toutes les lignes ont des valeurs manquantes ou sont exclues (log)
- Y( Transformer la colonne ( yname, Formula ( As Column (colname) ) ) ),
- Alerte JMP : Colonne non résolue 267 fois (boîte de dialogue)
- (pas d'erreurs de journal)
- Y( Transformer la colonne ( yname, Formula ( As Column (dt, colname) ) ) ),
- Alerte JMP : L'accès aux tables de données étendues nécessite une colonne ou une variable de table de données 267 fois (boîte de dialogue)
- (pas d'erreurs de journal)
Si mes tentatives ne le montrent pas clairement, je ne comprends toujours pas quelle est la différence entre As Column() et Column(). J'ai vu des solutions sur des forums avec l'un ou l'autre, donc je les ai toutes essayées et je n'ai abouti à rien. Le seul indice que je vois est que lorsque As Column() est utilisé indépendamment, j'obtiens un nombre différent de violations d'accès (267) par rapport au cas où il est encapsulé par Column() (256). Je sais que 267 est le nombre "correct" de lignes à renvoyer par ce filtre, car le codage en dur du nom de colonne dans la formule de transformation trace correctement 267 lignes.
De plus, j'ai essayé de définir la variable colname directement sur la colonne (colname = :R et colname = ":R") et diverses combinaisons consistant à les utiliser directement et/ou à les envelopper dans des combinaisons de Column() et As Column(). fonctionne également sans succès.
Quelqu'un peut-il voir ce que je fais de mal ici ?
Remarque : ce code exact n'a pas été testé, les noms de variables ont été génériques.
//
// Build plot functions
//
var_chart = Function( {dutname, ytype, stressname, bias, ver},
{chart, ax_min, ax_max, ax_step, len, colname, yname},
<BR /> ax_min = 0;<BR /> ax_max = 1;<BR /> ax_step = 0.1;<BR />
If(ytype == "r", (colname = "R"; yname = "R [Ω]"));<BR /> If(ytype == "l", (colname = "L"; yname = "L [H]"));<BR /> If(ytype == "c", (colname = "C"; yname = "C [F]"));
If(stressname == "s1", len = 1.1);
If(stressname == "s2", len = 2.2);
If(stressname == "s3", len = 3.3);
chart = Variability(
Y( Transform Column( yname, Formula( As Column(colname) ) ) ),
X( :X1, :X2, :X3, :X4 ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Show Box Plots( 1 ),
<<SET scale=""></SET>