JSL funktioniert in Version 19 nicht, aber in Version 17 schon.Ich habe gerade von JMP 17 auf JMP 19 aktualisiert. Ich habe eine lange und komplexe Routine, die in JMP 17 einwandfrei funktioniert, aber in JMP 19 nicht mehr. Es könnten noch weitere Fehler auftreten, aber der erste betrifft die Auswahl von Zeilen, die zur Korrektur bekannter Fehler in den importierten Daten geändert werden sollen. Beim Debuggen stelle ich fest, dass der Befehl „Zeilen abrufen, wo“ eine leere Matrix zurückgibt. Ich habe überprüft, dass die Zielzeile in der Datentabelle vorhanden ist und kann das Programm zwingen, sie auszuwählen, indem ich die Kriterien im Menü eingebe.
row_to_update = newContrib << Get Rows Where(:"request_id" == 263496 & :"line_no" == 0);
Der nachfolgende Befehl kann die gewünschte Korrektur in dieser Zeile nicht vornehmen, da row_to_update Folgendes zurückgibt: [](0, 1)
newContrib wurde zuvor als Datentabelle definiert. Wenn ich mit der Maus über den Variablennamen fahre, wird im Popup die richtige Tabelle angezeigt.
Basierend auf der Dokumentation habe ich versucht, die Zeile so zu ändern, dass sie Where verwendet, bin aber auf die gleiche Weise gescheitert.
row_to_update = newContrib[Where(:"request_id" == 263496 & :"line_no" == 0)];
Ich konnte in den Versionshinweisen nichts finden. Laut den Hilfehandbüchern scheint meine Syntax korrekt zu sein.
Könnte mir bitte jemand erklären, was sich geändert hat, dass es nicht mehr funktioniert, und wie man das Problem beheben kann?
Vielen Dank!
Nancy
Automatisierung und SkripterstellungBetreff: JSL funktioniert nicht in Version 19, aber in Version 17<< Get Rows Where funktioniert in JMP 19 immer noch so. Ihr zweiter Befehl (mit Where()) sollte sich etwas ändern.
Names Default To Here( 1 );
dt= Open( "$SAMPLE_DATA/Big Class.jmp" );
row_to_update = dt<< Get Rows Where( :"name" == "JANE" & :"age" == 12 ); //[3]
row_to_update2 = Where( dt, :name == "JANE" & :age == 12 ); //[3]
row_to_update = Where( newContrib, :request_id == 263496 & :line_no == 0 );
Was könnte das Problem sein? Überprüfen Sie, ob die Datentypen korrekt sind. Werden die Spalten in JMP 19 als Zeichenketten eingelesen, während sie in JMP 17 numerisch waren? Wahrscheinlich ist es etwas Simples, da sich die Syntax für << Get Rows Where nicht geändert hat.
Betreff: JSL funktioniert nicht in Version 19, aber in Version 17Hallo Nancy,
Die Klammern [](0,1) bedeuten, dass row_to_update eine leere Liste ist und daher keine passenden Zeilen in der Datentabelle vorhanden sind. Da Get Rows Where () eine Liste zurückgibt, ist der unten stehende Ansatz möglicherweise besser geeignet:
names default to here (1);
newContrib = New Table( "newContrib",
Add Rows( 3 ),
New Column( "request_id",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [263496, 263496, 263496] )
),
New Column( "line_no",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [0, 0, 1] )
)
);
row_to_update = newContrib << Get Rows Where(:"request_id" == 263496 & :"line_no" == 0);
//row_to_update is [1,2]
row_to_update = newContrib << Get Rows Where(:"request_id" == 263497 & :"line_no" == 0);
//row_to_update is empty: [](0, 1)
row_to_update = (newContrib << Get Rows Where(:"request_id" == 263496 & :"line_no" == 0))[1];
//row_to_update is 1
//a different approach:
rows_to_update = newContrib << Get Rows Where(:"request_id" == 263496 & :"line_no" == 0);
if (n items(rows_to_update) > 0, row_to_update = rows_to_update[1]);
Betreff: JSL funktioniert nicht in Version 19, aber in Version 17Vielen Dank für die Erklärung der korrekten Syntax für „Where“, die Bestätigung, dass sich die Syntax von „Get Rows Where“ nicht geändert hat, und vor allem für den Hinweis, die Datentypen zu überprüfen! Das war tatsächlich das Problem (Ganzzahlen wurden als Zeichenketten importiert). Tatsächlich werden jetzt alle meine Daten auf einem Dutzend Tabellenblättern als Zeichenketten importiert, obwohl sie vorher automatisch als verschiedene Datentypen erkannt wurden. Es handelt sich um eine so grundlegende Änderung des Importverhaltens, dass ich gar nicht daran gedacht hatte, dies zu überprüfen. Daher bin ich Ihnen sehr dankbar für den Hinweis, dass ich die Grundlagen vergessen hatte! Außerdem ist das Hinzufügen von Zeilen zum Ändern der Datentypen für Spalten oder das Überprüfen der Einstellungen meines Öffnen-Befehls viel einfacher zu beheben, als die Syntax der Hunderten von Codezeilen zu ändern, die „Get Rows Where“ verwenden!
Vielen Dank,
Nancy
Betreff: JSL funktioniert nicht in Version 19, aber in Version 17Es freut mich, dass es bei Ihnen funktioniert. Ich möchte noch hinzufügen, dass es sich für Sie lohnen könnte, Ihr Skript auf die Verwendung von `Where()` umzustellen. Die Leistungssteigerung ist beträchtlich. Beispielsweise habe ich diesen Code auf einer Tabelle mit einer Million Zeilen ausgeführt. `Where()` war etwa zehnmal schneller als <
Names Default to Here( 1 );
dt = Current Data Table();
now = HP Time();
row_to_update = dt << Get Rows Where( :request_id == 220681 & :line_no == 70 );
then = HP Time();
elapsed = then - now;
Show( elapsed ); //119053
Wait( 2 );
now = HP Time();
row_to_update = Where( dt, :request_id == 220681 & :line_no == 70 );
then = HP Time();
elapsed = then - now;
Show( elapsed ); //11777