JSL-Skript mit Schleifen und ZusammenfassungBrauchen Sie einen Vorschlag, wie man diese Schleife zum Funktionieren bringt: Es gibt immer wieder Schluckauf in der Zeile mit Group( Box(i) ) und ich dachte, es sei ein Problem mit Zahlen oder Klammern/falschen Spaltennamen. aber diese anzupassen hat nicht geholfen
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 ) )
)
);
DatenzugriffDatenmischung und -bereinigungBetreff: JSL-Skript mit Schleifen und ZusammenfassungIch habe eine Datentabelle mit einer Spalte namens Place ID erstellt.Ich habe es mit 100 Zufallswerten im Bereich von 1 bis 850 gefüllt.

Dann habe ich den Codeabschnitt verschiedener Box- und ActualLoc-Programme ausgeführt und eine Datentabelle erstellt, die so aussieht:

Ich sehe nicht die Absicht, diese Vorgänge durchzuführen.
Es scheint mir (ich könnte mich leicht irren), dass Sie einige Elemente, die Sie verwenden, nicht verstehen.In Ihrer ersten For()-Schleife erstellen Sie fünfmal die gleichen Spalten Scenario, Box und ActualLoc.Und da JMP nicht zulässt, dass eine Spalte denselben Namen hat, werden beim Erstellen von Scenario, Box und ActualLoc während der ersten Schleife diese Namen tatsächlich verwendet.In Schleife 2 erzwingt JMP jedoch die Namen Szenario 2, Box 2 und ActualLoc 2. Die Schleifen 3, 4 und 5 wiederholen dieses Verhalten.Auch die verwendeten Formeln sind etwas verwirrend.Sie verwenden wiederholt die Angabe (:Place ID - i).Da dies in einer Formel verwendet wird, bedeutet dies, dass die Formel auf jede Zeile in der Datentabelle angewendet wird und das Ergebnis dieser Berechnung der Wert der Variablen Place ID für die angegebene Zeile (d. h. Zeile 1 in my.) ist Die Datentabelle hat den Wert 268) und subtrahiert den aktuellen Wert von i, der in der ersten Schleife den Wert 1, in der zweiten Schleife den Wert 2 usw. hat. Somit liegen die Werte für Zeile 1 zwischen 267 und 263 .Ich vermute, Sie denken vielleicht, dass :Place ID -1 auf die Spalte verweist, die vor :Place ID steht.
Können Sie mir helfen und erklären, was Sie mit Ihrer Datentabelle mit der darin enthaltenen Spalte „Orts-ID“ tun möchten?
Betreff: JSL-Skript mit Schleifen und ZusammenfassungMMMM, ich bin mir nicht sicher ... meine Skriptfähigkeiten sind unterdurchschnittlich. Hier ist mein ganzer Code. Bis zum Schleifenabschnitt mit dem Zusammenfassungsschritt läuft es einwandfrei.
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 );
);
Betreff: JSL-Skript mit Schleifen und ZusammenfassungIch ging davon aus, dass Box auf eine Speichervariable namens Box verweist, die eine Liste ist und mehrere Elemente enthält, von denen jedes der Name einer Variablen ist. Wenn das nicht der Fall ist, was ist dann Box?Betreff: JSL-Skript mit Schleifen und ZusammenfassungDanke, Jim.
Ich verstehe die Notwendigkeit, die Listenvariable und den Tippfehler hinzuzufügen. Wenn ich jedoch den Code aktualisiert und ausgeführt habe, erhalte ich diese Fehlermeldung. Meine Spaltennamen sind „Box 1“. „Box 2“ usw.
Allerdings habe ich versucht, die Spaltennamen in Box1, Box 2 und Box3 usw. zu ändern, und habe den gleichen Fehler erhalten. irgendwelche Vorschläge?

Betreff: JSL-Skript mit Schleifen und Zusammenfassung// 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 );
);