Salut tout le monde,
Je remarque que la plateforme de distribution ne semble pas accepter les références de colonnes de la même manière que Graph Builder, par exemple.
J'ai du code dans lequel je fais référence à différentes colonnes dans une table de données en utilisant le format Column(dtname, number). Par exemple, voici un peu de code que je fais avec GB et qui fonctionne très bien :
Graph Builder(
Size( 500, 350 ),
Show Control Panel( 0 ),
Variables(
X( Column( dt_results, NNxcol ) ),
Y( Column( dt_results, NNYCol + N Items( NNXList ) ) ),
Y( Column( dt_results, NNYCol + 1 + N Items( NNXlist ) ), Position( 1 ) ),
Y( Column( dt_results, NNYCol + 2 + N Items( NNXList ) ) )
),
Elements(
Position( 1, 1 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 8 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 9 ) )
),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 10 ) ), Smoother( X, Y, Legend( 11 ) ) ),
SendToReport(
Dispatch(
{},
"graph title",
TextEditBox,
{Set Text( NNYList[NNYCol] || " Stats vs. " || NNXList[NNxcol] )}
),
Dispatch( {}, "Y title", TextEditBox, {Set Text( NNYList[NNYCol] || " Train & Valid" )} )
)
)
Cependant, lorsque j'essaie de faire quelque chose de similaire sur la plateforme de distribution, rien ne se passe, et je pense que c'est parce que l'appel à Distribution continue() ne semble pas aimer faire référence à une colonne de cette façon. Il semble que faire référence à la colonne en tant que colonne (nom de la colonne).
Distribution(
Continuous Distribution( Column( dt_results, NNYCol + NNcolshift ), Quantiles( 0 ) ),
Continuous Distribution( Column( dt_results, NNYCol + 1 + NNcolshift ), Quantiles( 0 ) ),
Continuous Distribution( Column( dt_results, NNYCol + 2 + NNcolshift ), Quantiles( 0 ) )
)
Je souhaite utiliser des variables lorsque j'appelle la plateforme car le code est plus flexible que le codage en dur dans le nom de la colonne lui-même. Avez-vous une idée de la raison pour laquelle la plate-forme de distribution se comporte différemment ou de la manière de référencer correctement la colonne afin d'obtenir le résultat souhaité ?
Toutes les pensées/commentaires sont appréciés.
Merci!,
DS
Vous pouvez simplement envoyer un message à votre table de données et supprimer la référence à la table dans la fonction Column().Quant à savoir pourquoi il n'aime pas la syntaxe du script qui fonctionne avec Graph Builder, je ne sais pas.
dt_results << Distribution(
Continuous Distribution( Column( NNYCol + NNcolshift ), Quantiles( 0 ) ),
Continuous Distribution( Column( NNYCol + 1 + NNcolshift ), Quantiles( 0 ) ),
Continuous Distribution( Column( NNYCol + 2 + NNcolshift ), Quantiles( 0 ) )
)
Vous pouvez utiliser une syntaxe amusante et déroutante comme celle-ci
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col1 = "height";
col2 = "weight";
dist = dt << Distribution(
Continuous Distribution(Column(Column(dt, col1)), Quantiles(0)),
Continuous Distribution(Column(Column(dt, col2)), Quantiles(0))
);
ou ca
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col1 = "height";
col2 = "weight";
Eval(EvalExpr(
dist = dt << Distribution(
Continuous Distribution(Column(Eval(col1)), Quantiles(0)),
Continuous Distribution(Column(Eval(col2)), Quantiles(0))
);
));
Edit : Eval(EvalExpr()) n'est pas nécessaire dans le script ci-dessus. Je l'ai laissé là par accident en testant différentes options (je jouais avec Name Expr(AsColumn())).
Ou juste un de ceux-ci :
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col1 = "height";
col2 = "weight";
Distribution(Continuous Distribution(Column(Eval(col1))));
colList={col1,col2};
Distribution(column(EvalList(colList)));
De plus amples détails peuvent être trouvés ici:
https://www.pega-analytics.co.uk/blog/handling-lists-of-columns/ (merci @Ressel
et ici:
https://community.jmp.com/t5/Discussions/Updating-column-list-box-using-list-stored-in-variable-not/mp/687314/highlight/true#M87301
La confusion surgit parce que (bien connu) Colonne est utilisé comme nom pour un argument nommé dans Distribution continue. De nombreux utilisateurs de Jmp supposeront que c'était le Colonne() fonctionner et l’utiliser en conséquence.
Idem pour Data Table() dans la zone de liste Col : La mise à jour de la zone de liste de colonnes à l'aide de la liste stockée dans la variable ne fonctionne pas comme prévu. Est-ce ainsi que cela est censé être ?
Salut tout le monde,
Merci pour vos commentaires rapides et votre aide à ce sujet. J'ai fini par y aller avec un mélange de @mmarchandTSI et @jthi C'est la deuxième suggestion. Malheureusement, la suggestion de @mmarchandTSI n'a pas fonctionné tout seul, la plate-forme n'aimait toujours pas les variables pour le numéro de colonne dans la référence Column(). Cependant, si je faisais ensuite un Eval() sur les variables numériques dans la référence Column(), alors cela fonctionnait très bien. Donc, en utilisant Column(Eval()), comme @jthi et @hogi fait, a fini par fonctionner comme prévu.
Merci pour les excellentes suggestions!,
DS