Zeilenabwärts iterierenHallo,
Ich bin neu bei JMP/JSL, habe aber Erfahrung mit Java und schreibe derzeit ein Programm, das eine Spalte mit Adressdaten durchlaufen und prüfen muss, ob die Adresse bereits im System vorhanden ist. Ist dies der Fall, sollten neue Spalten mit den Breiten- und Längengradwerten gefüllt werden. Ich verwende assoziative Arrays und das ist, was ich bisher habe:
NamesDefaultToHere(1); //alle Variablen lokal
rawData = Open("Kevin-PriceAnalysis-DO Basis US bis April.jmp");
Aktuelle Datentabelle (rawData); //aktuelle Datentabelle auf Liste der Krankenhäuser eingestellt
Adresse = Column(rawData, "Full Address");
dt_latMap = Associative Array(address, rawData:Latitude); //ordnet die eindeutige vollständige Adresse dem Breitengrad zu
dt_longMap = Associative Array(address, rawData:Longitude); //ordnet die eindeutige vollständige Adresse dem Längengrad zu
dt_coord = new Table("Koordinaten",
Neue Spalte("Lat", Numerisch, Fortlaufend, Format("Lat DDD", 24, 14)),
Neue Spalte („Lang“, Numerisch, Fortlaufend, Format („Long DDD“, 24, 14))
); //neue Datentabelle mit Koordinaten (leer)
For(i = 1, i <= N Rows(rawData), i++, //durchläuft Rohdaten und prüft, ob sie in der Karte enthalten sind
If(Contains(dt_latMap, address[i]), //wenn ja, aktualisiert die Koordinaten
dt_coord:Lat = dt_latMap< dt_coord:Long = dt_longMap< !Contains(dt_latMap, address[i]), //Wenn nicht, Schleife weitermachen
weitermachen();
);
);
Ich erhalte ständig die Meldung „Der Wert für ‚Lat‘ kann nicht festgelegt werden, da die Zeilennummer (-1) ungültig ist.“ Ich dachte, es könnte ein Problem mit der Spaltenbenennung sein, aber ich habe versucht, die Namen der Spalten zu ändern. Jede Hilfe wäre sehr dankbar! Danke!
Betreff: Zeilen nach unten iterierenVielen Dank!
Betreff: Zeilen nach unten iterierenIch habe gerade Ihren Code anhand der Tabelle „San Francisco Crime.jmp“ durchgesehen. Tut mir leid, dass mir das vorher nicht aufgefallen ist, aber die Tabelle dt_coord enthält keine Zeilen. Wenn die Kriterien in Ihrem If() erfüllt sind, fügen Sie zunächst eine Zeile hinzu. Verwenden Sie dann diese Zeilennummer als Index für Ihre Spaltenreferenz.
Contains( dt_latMap, address[i] ), //if yes updates coordinates
dt_coord << Add Rows( 1 );
r = N Rows( dt_coord );
dt_coord:Lat[r] = dt_latMap << Get Value( address[i] );
dt_coord:Long[r] = dt_longMap << Get Value( address[i] );,
Betreff: Zeilen nach unten iterierenHallo Wendy,
Ich habe versucht, alle Spalten- und Variablennamen zu ändern und habe immer noch das gleiche Problem. Seitdem habe ich den Code, der das assoziative Array füllt, wie folgt geändert:
For(j = 1, j<= N Rows(rawData),j++,
If(!Contains(dt_latMap, address[j]),
dt_latMap << Insert(address[j], rawData:Latitude[j]),
!Contains(dt_LongMap,address[j]),
dt_longMap << Insert(address[j], rawData:Longitude[j]);
)
);
aber ich erhalte immer noch die ungültige Zeilennummer, diesmal mit der Aussage, dass der Index 0 ist. Vergesse ich, die aktuelle Zeile irgendwo festzulegen? Danke!
Betreff: Zeilen nach unten iterierenHallo,
Es hört sich so an, als hätten Sie einen Spaltennamen und einen JSL-Variablennamen, die identisch sind. Siehe die Verhindern von Konflikten zwischen Spaltennamen und Variablennamen Abschnitt in der Online-Dokumentation.
Ich hoffe, das ist hilfreich.