Script JSL utilisant des boucles et un résuméBesoin d'une suggestion sur la façon de faire fonctionner cette boucle : elle n'arrête pas de hoqueter à la ligne avec Group( Box(i) ) et je pensais que c'était un problème avec des nombres ou des crochets / des noms de colonne incorrects. mais les ajuster n'a pas aidé
For( j = 1, j < 3, j++,
nrj j = dt1 << Summary(
Group( Box( i ) ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "Sum " || Char( j ) )
)
);
Accès aux donnéesFusion et nettoyage des donnéesRe : Script JSL utilisant des boucles et un résuméJ'ai créé une table de données avec une colonne appelée Place ID.Je l'ai rempli avec 100 valeurs aléatoires allant de 1 à 850.

J'ai ensuite exécuté la section de code contenant divers Box et ActualLoc et cela a créé une table de données qui ressemble à ceci :

Je ne vois pas l'intention d'effectuer ces opérations.
Il me semble (je peux facilement me tromper) que vous n'avez pas la compréhension de certains éléments que vous utilisez.Dans votre première boucle For(), vous créez les mêmes colonnes de Scenario, Box et ActualLoc 5 fois.Et puisque JMP ne permettra pas qu'une colonne ait le même nom, lorsque vous créez Scenario, Box et ActualLoc lors de la première boucle, ce sont les noms réels qu'il utilisera.Cependant, lors de la boucle 2, JMP forcera les noms à Scenario 2, Box 2 et ActualLoc 2. Les boucles 3, 4 et 5 répètent ce comportement.Les formules utilisées sont également un peu déroutantes.Vous utilisez à plusieurs reprises la spécification de (:Place ID - i).Étant donné que cela est utilisé dans une formule, cela signifie que la formule sera appliquée à chaque ligne de la table de données, et le résultat de ce calcul sera la valeur de la variable Place ID pour la ligne donnée (c'est-à-dire la ligne 1 dans mon la table de données a la valeur 268) et il soustraira la valeur actuelle de i, qui a la valeur de 1 sur la première boucle, 2 sur la deuxième boucle, etc. Ainsi, pour la ligne 1, les valeurs vont de 267 à 263 .Je soupçonne que vous pensez peut-être que :Place ID -1 fait référence à la colonne qui précède :Place ID.
Pouvez-vous m'aider et clarifier ce que vous essayez de faire avec votre table de données avec la colonne ID de lieu ?
Re : Script JSL utilisant des boucles et un résuméMMMM je ne suis pas sûr ... mes compétences en script sont inférieures à la normale. Voici mon code complet. Il fonctionne bien jusqu'à la section de boucle avec l'étape de résumé.
t1 = Open( "C:\Users\ClaireR\Desktop\Example\ExampleABC.jmp" );
For( i = 1, i <= 5, i++,
dt1 << New Column( "Scenario", Numeric, "Continuous", Formula( :Place ID - i ) );
dt1 << New Column( "Box",
Character,
"Nominal",
Formula(
If( (:Place ID - i) <= 200,
"Ground",
If( (:Place ID - i) <= 250,
"Drop 1",
If( (:Place ID - i) <= 400,
"Ground",
If( (:Place ID - i) <= 450,
"Drop 2",
If( (:Place ID - i) <= 600,
"Ground",
If( (:Place ID - i) <= 650,
"Drop 3",
If( (:Place ID - i) <= 800,
"Ground",
If( (:Place ID - i) <= 850,
"Drop 4",
"Ground"
)
)
)
)
)
)
)
)
)
);
dt1 << New Column( "ActualLoc",
Character,
"Nominal",
Formula(
If( (:Place ID - i) <= 200,
"Ground",
If( (:Place ID - i) <= 250,
:Place ID 2,
If( (:Place ID - i) <= 400,
"Ground",
If( (:Place ID - i) <= 450,
:Place ID 2,
If( (:Place ID - i) <= 600,
"Ground",
If( (:Place ID - i) <= 650,
:Place ID 2,
If( (:Place ID - i) <= 800,
"Ground",
If( (:Place ID - i) <= 850,
:Place ID 2,
"Ground"
)
)
)
)
)
)
)
)
)
);
);
:Scenario << Set Name( "Scenario 1" );
:Box << Set Name( "Box 1" );
:ActualLoc << Set Name( "ActualLoc" );
mrj = {};
For( j = 1, j < 3, j++,
newDT = dt1 << Summary(
Group( Box[j] ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "Sum " || Char( j ) )
);
Insert Into( mrj, newDT );
);
Re : Script JSL utilisant des boucles et un résuméJ'ai supposé que Box faisait référence à une variable de mémoire appelée Box qui est une liste et contient plusieurs éléments, chacun étant le nom d'une variable. Si ce n'est pas ça, qu'est-ce que Box ?Re : Script JSL utilisant des boucles et un résuméMerci Jim.
Je comprends la nécessité d'ajouter la variable de liste et la faute de frappe. Cependant, lorsque j'ai mis à jour le code et l'ai exécuté, j'obtiens cette erreur. Les noms de mes colonnes sont "Box 1" . "Boîte 2" etc...
Cependant, j'ai essayé de changer les noms de colonne en Box1 , Box 2 et Box3 etc , et j'ai eu la même erreur. Aucune suggestion?

Re : Script JSL utilisant des boucles et un résumé// I am assuming that your syntax of
// nrj j = dt1 << Summary(
// was an attempt to create a pointer to each new data table
// being created in the Loop, one for each column in the list
// of columns called "Box"
// To do that, one needs to create a new List variable, and then
// populate the list by inserting the new data table reference
// by using an "Insert Into()" on each loop
// Create a list variable to hold the data table references
mrj = {};
For( j = 1, j < 3, j++,
newDT = dt1 << Summary(
// Your reference to the list variable called "Box"
// Group( Box(i) ),
// incorrect for 2 reasons. 1. When referencing a
// subscript, it is done using square brackets [ ],
// 2. the index variable you are specifying is "i",
// while the index variable for your For() loop is
// a the variable "j"
Group( Box[j] ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "Sum " || Char( j ) )
);
Insert Into( mrj, newDT );
);