Création d'un tableau avec formule dans les colonnes - Random Normal() - à partir d'un jmp externeSalut,
Quelqu'un peut-il m'aider avec un code JSL, qui génère une nouvelle table avec une formule à l'intérieur des propriétés des colonnes ?
La taille du tableau, les noms des colonnes et les paramètres de la formule proviennent d'un fichier jmp externe comme ci-joint.
Quelqu'un peut-il partager un extrait de code, comment commencer avec ?
Personnalisation de masseRe : Création d'un tableau avec une formule dans les colonnes - Random Normal() - à partir d'un jmp externeLa suppression de la colonne 1 est facile dans le script, cela ne devrait donc pas poser de problème. Je créerais soit une colonne avec un nom spécifique, soit je la supprimerais en utilisant index
Names Default To Here(1);
dt = New Table("testtable", add rows(1),
new column("REMOVETHIS")
);
wait(1); //for demonstration purposes<BR />//dt << Delete Column(1);
dt << Delete Columns("REMOVETHIS");L'utilisation de Définir chaque valeur est préférable si vous n'avez pas besoin de formules, car elle est plus rapide.
Pour apprendre... Eval(EvalExpr()) ne sont certainement pas les choses les plus faciles à comprendre, mais il y a du contenu qui pourrait aider. En vérifiant rapidement, j'ai trouvé ceux-ci:
Re : Création d'un tableau avec une formule dans les colonnes - Random Normal() - à partir d'un jmp externeLe script réel génère une colonne indéfinie " Clolumn 1".
Et la génération de colonnes dans New Table () ne crée pas une telle colonne. C'est juste cosmétique...
en attendant, j'ai un script qui a une définition de colonne unique et les autres sont ajoutés en dehors de la nouvelle colonne.
Et la nouvelle table générée a des valeurs calculées correctes. Cependant, si je regarde à l'intérieur de la formule, elle contient l'expression du script.
Je peux masquer ce fait en utilisant Définissez chaque valeur(). Mais ça me rend fou... 
Et maintenant, je suis obsédé de comprendre pourquoi l'expression n'est pas évaluée correctement. Je n'ai pas réussi à utiliser Eval () Eval Expr() et Expr(). Je crois comprendre leurs fonctions mais avec la combinaison avec Formula, aucune chance.
Cependant, mon problème initial est résolu avec votre proposition. Merci!
Re : Création d'un tableau avec une formule dans les colonnes - Random Normal() - à partir d'un jmp externeY a-t-il une raison spécifique pour laquelle vous voudriez créer les colonnes dans New Table() ? Je ne suis pas sûr que ce soit possible et si c'est le cas, cela rendra probablement le code plus désordonné par rapport à leur création après New Table().
Re : Création d'un tableau avec une formule dans les colonnes - Random Normal() - à partir d'un jmp externeMerci! Cela a fonctionné avec ce code juste en dessous. Et ça m'aide beaucoup !!
Cependant, je suis motivé pour apprendre un peu JSL maintenant. Et j'ai réfléchi à une éventuelle implémentation. Deuxième code.
Clear Globals();
Names Default To Here( 1 );
//mydt =
//Data Table( "dt_RandomNormalParameter" ) <<
mydt = Current Data Table();
// New data table
my_newdt = New Table( "Table Name", Add Row ( 1000 ));
//lets use formulas, we can easily add more rows if needed
For Each Row(
mydt,
columnName = As Column(mydt, "Analysis Columns");
meanValue = As Column(mydt, "Mean");
stdDevValue = As Column(mydt, "Std Dev");
//use eval expr to get values in formula
Eval(Eval Expr(my_newdt << New Column(columnName, Numeric, Continuous, Formula(Random Normal(Expr(meanValue), Expr(stdDevValue))))));
);
// Code adds Column "Column 1"
mon concept pour résoudre mon problème:
Clear Globals();
Names Default To Here( 1 );
mydt = Current Data Table();
// New data table
my_newdt = New Table( "Table Name",
Add Rows (N Rows ( mydt )), // row count can be set by hand e.g. 1000
//For ( i = 1, i <= N Rows ( mydt ), i++, // for loop is not executed
New Column( Column(mydt, 1 )[1] , // Loop i==1
Numeric,
"Continuous",
Format( "Best", 6 ),
Formula( Random Normal( Column(mydt, :Mean )[1], Column(mydt, :Std Dev )[1] ) )// Column(mydt, :Mean )[1] is not evalueted
),
New Column( Column(mydt, 1 )[2] , // Loop i ==2
Numeric,
"Continuous",
Format( "Best", 6 ),
Formula( Random Normal( Column(mydt, :Mean )[2], Column(mydt, :Std Dev )[2] ) )//// Column(mydt, :Mean )[1] is not evalueted
)
//)// for loop
)// New data tableMalheureusement, je ne sais pas comment utiliser "for loop" dans "New Table" et évaluer l'index dans Formula.
Je suppose un peu comment avec Eval, Eval Expr.
Mais je ne comprends pas la syntaxe.
Croyez-vous que mon concept pourrait également fonctionner avec une syntaxe appropriée ?
Que faut-il modifier ?
Re : Création d'un tableau avec une formule dans les colonnes - Random Normal() - à partir d'un jmp externeVous pouvez parcourir votre RandomNormal_dt.jmp avec For Each Row, puis obtenir les valeurs des colonnes. Utiliser Eval(EvalExpr()) pour ajouter des valeurs à Formula.
Names Default To Here(1);
dt_random = New Table("RandomNormal_dt",
Add Rows(20),
New Column("Analysis Columns",
Character(6),
"Nominal",
Set Values(
{"Name1", "Name2", "Name3", "Name4", "Name5", "Name6", "Name7", "Name8", "Name9", "Name10", "Name11", "Name12", "Name13", "Name14","Name15", "Name16", "Name17", "Name18", "Name19", "Name20"}
),
),
New Column("Mean", Numeric, "Continuous", Format("Best", 6), Set Values([1, 1, 0, 0, 0, 2, 2, 3, 3, 5, 10, -5, -6, 3, 3, 3, 3, 3, 0.5, 0.5]), ),
New Column("Std Dev",
Numeric,
"Continuous",
Format("Best", 6),
Set Values(
[0.0059167075785471, 0.00455419279075633, 0.00421951193571742, 0.00421951193571742, 0.00440945078910684, 0.00440945078910684,
0.0102216984358101, 0.00419398115162298, 0.0808821732109718, 0.0876924473662647, 0.119338972830502, 0.0918654224334168,
0.0921864791037008, 0.0868549769597964, 0.0808821732109718, 0.0865262154672911, 0.186459394109712, 0.189566585675401, 0.0876924449303901,
0.0434724818197371]
),
)
);
//create collection table
dt = New Table("Analysis");
//lets use formulas, we can easily add more rows if needed
For Each Row(
dt_random,
columnName = As Column(dt_random, "Analysis Columns");
meanValue = As Column(dt_random, "Mean");
stdDevValue = As Column(dt_random, "Std Dev");
//use eval expr to get values in formula
Eval(Eval Expr(dt << New Column(columnName, Numeric, Continuous, Formula(Random Normal(Expr(meanValue), Expr(stdDevValue))))));
);

Ensuite, vous pouvez ajouter des lignes selon vos besoins. Après avoir ajouté des lignes, vous pouvez supprimer des formules pour accélérer la table de données si nécessaire. Si vous savez combien de lignes vous avez besoin, vous pouvez remplacer Formula() par << Set Each Value() et créer la collection avec suffisamment de lignes.