Iterare le righe in bassoCiao,
Sono nuovo di JMP/JSL ma ho esperienza con Java e attualmente sto scrivendo un programma che deve scorrere una colonna di dati di indirizzo e controllare se l'indirizzo è già nel sistema; in tal caso, dovrebbe popolare le nuove colonne con i valori di latitudine e longitudine. Sto usando array associativi e questo è quello che ho finora:
NomiDefaultToHere(1); //tutte le variabili locali
rawData = Open("Kevin-PriceAnalysis-DO Base US thru April.jmp");
Tabella dati corrente (rawData); //tabella dati corrente impostata sull'elenco degli ospedali
indirizzo = Colonna (rawData, "Indirizzo completo");
dt_latMap = Array associativo (indirizzo, rawData: Latitude); //mappa l'indirizzo completo univoco alla latitudine
dt_longMap = Array associativo (indirizzo, dati grezzi: longitudine); //mappa l'indirizzo completo univoco alla longitudine
dt_coord = nuova tabella("Coordinate",
Nuova colonna("Lat", Numerico, Continuo, Formato("Lat DDD", 24, 14)),
Nuova colonna("Lungo", Numerico, Continuo, Formato("DDD lungo", 24, 14))
); //nuova tabella dati di coordinate (vuota)
For(i = 1, i <= N Rows(rawData), i++, //itera i dati grezzi, controlla se sono contenuti nella mappa
If(Contains(dt_latMap, address[i]), //if yes aggiorna le coordinate
dt_coord:Lat = dt_latMap< dt_coord:Long = dt_longMap< !Contains(dt_latMap, indirizzo[i]), //in caso contrario, continua a eseguire il loop
Continua();
);
);
Continuo a ricevere un "impossibile impostare il valore per 'Lat' perché il numero di riga (-1) non è valido. Ho pensato che potesse essere un problema con la denominazione delle colonne, ma ho provato a cambiare i nomi delle colonne. Qualsiasi aiuto sarebbe molto apprezzato! Grazie!
Re: Iterare le righe in bassograzie mille!
Re: Iterare le righe in bassoHo appena esaminato il tuo codice usando la tabella San Francisco Crime.jmp. Mi dispiace non averlo notato prima, ma la tabella dt_coord non ha righe. Quando i criteri sono soddisfatti nel tuo If(), aggiungi prima una riga. Quindi usa quel numero di riga come pedice al riferimento della tua colonna.
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] );,
Re: Iterare le righe in bassoCiao Wendy,
Ho provato a cambiare tutti i nomi di colonne e variabili e ho ancora lo stesso problema. Da allora ho modificato il codice che popola l'array associativo in quanto tale:
For(j = 1, j<= N righe(rawData),j++,
If(!Contains(dt_latMap, indirizzo[j]),
dt_latMap << Inserisci(indirizzo[j], rawData:Latitude[j]),
!Contiene(dt_LongMap,indirizzo[j]),
dt_longMap << Inserisci(indirizzo[j], rawData:Longitudine[j]);
)
);
ma sto ancora ottenendo il numero di riga non valido, questa volta dicendo che l'indice è 0. Sto dimenticando di impostare la riga corrente da qualche parte? Grazie!
Re: Iterare le righe in bassoCiao,
Sembra che tu abbia un nome di colonna e un nome di variabile JSL che sono gli stessi. Vedi il Prevenzione dei conflitti di nomi di colonne e nomi di variabili sezione nella documentazione in linea.
Spero che questo sia utile.