Iterando hacia abajo las filasHola,
Soy nuevo en JMP / JSL pero tengo experiencia con Java y actualmente estoy escribiendo un programa que debe recorrer una columna de datos de dirección y verificar si la dirección ya está en el sistema; si es así, debe llenar nuevas columnas con los valores de latitud y longitud. Estoy usando matrices asociativas y esto es lo que tengo hasta ahora:
NombresDefaultToHere (1); // todas las variables locales
rawData = Abierto ("Kevin-PriceAnalysis-DO Basis US hasta April.jmp");
Tabla de datos actuales (rawData); // tabla de datos actual ajustada a la lista de hospitales
address = Column (rawData, "Dirección completa");
dt_latMap = Array asociativo (address, rawData: Latitude); // asigna una dirección completa única a latitude
dt_longMap = Array asociativo (address, rawData: Longitude); // asigna la dirección completa única a la longitud
dt_coord = new Table ("Coordenadas",
Nueva columna ("Lat", Numérico, Continuo, Formato ("Lat DDD", 24, 14)),
Nueva columna ("Largo", Numérico, Continuo, Formato ("DDD Largo", 24, 14))
); // nueva tabla de datos de coordenadas (vacía)
Para (i = 1, i <= N Filas (rawData), i ++, // itera a través de datos sin procesar, verifica si está contenido en el mapa
Si (Contiene (dt_latMap, dirección [i]), // si sí, actualiza las coordenadas
dt_coord: Lat = dt_latMap << Get Value (address [i]);
dt_coord: Long = dt_longMap << Obtener valor (dirección [i]),
! Contiene (dt_latMap, dirección [i]), // si no, mantenga el bucle
continuar();
);
);
Sigo obteniendo un "no se puede establecer el valor para 'Lat' porque el número de fila (-1) no es válido. Pensé que podría ser un problema con el nombre de la columna, pero intenté cambiar los nombres de las columnas. Cualquier ayuda sería muy apreciada! ¡Gracias!
Re: Iterando hacia abajo las filas¡muchas gracias!
Re: Iterando hacia abajo las filasAcabo de revisar tu código usando la tabla San Francisco Crime.jmp. Lo siento, no noté esto antes, pero la tabla dt_coord no tiene filas. Cuando se cumplan los criterios en su If (), primero agregue una fila. Luego use ese número de fila como un subíndice a su referencia de columna.
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: Iterando hacia abajo las filasHola wendy
He intentado cambiar todos los nombres de columna y variable y todavía tengo el mismo problema. Desde entonces he cambiado el código que llena la matriz asociativa como tal:
Para (j = 1, j <= N filas (rawData), j ++,
Si (! Contiene (dt_latMap, dirección [j]),
dt_latMap << Insertar (dirección [j], rawData: Latitude [j]),
! Contiene (dt_LongMap, dirección [j]),
dt_longMap << Insertar (dirección [j], rawData: Longitud [j]);
)
);
pero todavía obtengo el número de fila no válido, esta vez diciendo que el índice es 0. ¿Estoy olvidando de establecer la fila actual en algún lugar? ¡Gracias!
Re: Iterando hacia abajo las filasHola,
Parece que tienes un nombre de columna y un nombre de variable JSL que son los mismos. Ver el Prevención de conflictos de nombre de columna y nombre de variable Sección en la documentación en línea.
Espero que esto sea de ayuda.