etucker0 ,
Déjame ver si lo tengo. si comprendo correctamente, hay una medición y una ubicación y usted quiere saber cuántas repeticiones hay para una medición (con cierta tolerancia) en una ubicación (con cierta distancia). Tomemos, por ejemplo, los datos de muestra de Hurricanes con las ubicaciones y las medidas de velocidad del viento. Si quiere saber para cada fila cuántas veces hay mediciones de viento similares (en nudos) dentro de una cierta distancia (radio en KM), puede usar el siguiente script.
al final, tendrá un número de mediciones "Igualadas" para cada fila en la tabla.
alternativamente, puede comparar datos en dos tablas, si tiene una lista preseleccionada con la que desea comparar.
Déjame saber si esto es lo que estás buscando.
Globos claros () ;
Nombres predeterminados aquí ( 1 ) ;
// archivo de datos abierto (puntos) - esto incluye la observación que queremos actualizar
sdots = Abierto ( "C: \ Archivos de programa (x86) \ SAS \ JMPSW \ 11 \ Samples \ Data \ Hurricanes.jmp" ) ;
puntos = Tabla de datos ( sdots ) << Subconjunto ( Tamaño de la muestra ( 2000 ) ) ; // hacer una mesa más pequeña para la velocidad
Cerrar ( sdots , no guardar ) ;
// añadir algo de ruido a la medida del viento
puntos << Nueva Columna ( "Viento" , fórmula ( : Nombre ( "Viento (nudos)" ) + Aleatorio normal () ) ) ;
// introducir una columna de conteo
puntos << Nueva Columna ( "repetido" ) ;
// extraer los valores de longitud y latitud de la tabla, como radianes
X = ( Columna ( puntos , "Longitud" ) << getValues ) * Pi () / 180 ;
y = ( Columna ( puntos , "Latitud" ) << getValues ) * Pi () / 180 ;
// declarar la función de cálculo en KM
haversine = Función ( { long1 , lat1 , long2 , lat2 , R = 6371 } ,
{ Predeterminado local } ,
una = Pecado ( ( lat1 - lat2 ) / 2 ) ^ 2 + Cos ( lat1 ) * Cos ( lat2 ) * Pecado ( ( long1 - long2 ) / 2 ) ^ 2 ;
do = 2 * Un bronceado ( una ^ 0.5 , ( 1 - una ) ^ 0.5 ) ;
re = R * do ;
) ;
// definir tolerancia en distancia y velocidad del viento
distancia = 100 ; // en km
diferencia = 10 ; // en nudos
Espere ( 0.01 ) ;
// ejecuta la función a lo largo de las filas de la tabla
por ( yo = 1 , yo <= N fila ( puntos ) - 1 , yo ++,
z = 0 ;
por ( eso = 1 , eso <= N fila ( puntos ) - 1 , eso ++,
Si (
haversine ( X El yo ] , y El yo ] , X El eso ] , y El eso ] ) < distancia // condición para la distancia
Y Abdominales ( : Viento El yo ] - : Viento El eso ] ) < diferencia
, // condición para la diferencia en la medida del viento
z ++; // contar los partidos
)
) ;
z -; // eliminar uno que coincida consigo mismo.
: repetido El yo ] = z ; // actualizar la tabla
) ;
// mapear los resultados
Generador de gráficos (
Mostrar panel de control ( 0 ) ,
Variables ( X ( : Longitud ) , Y ( : Latitud ) , tamaño ( : repetido ) ) ,
Elementos ( Puntos ( X , Y , Leyenda ( 1 ) , Estar nervioso ( 1 ) ) ) ,
SendToReport (
Envío ( {} , "Generador de gráficos" , FrameBox , { Mapa de fondo ( Imágenes ( "Tierra simple" ) ) , Orden de línea de cuadrícula ( 2 ) , Orden de línea de referencia ( 3 )} )
)
)
Hola ron
Lo siento, debería haber sido más claro. Estos datos simulados son para dos señales SOLAMENTE desde la primera medición. Por lo tanto, hay otras 9 mediciones repetidas donde para esas dos señales, habrá valores x e y ligeramente desplazados (y, definitivamente, diferentes números de identificación). Además, la amplitud SD1 y SD2 también variarán un poco. Espero que ayude.
Una repetición puede parecer algo como esto:
CARNÉ DE IDENTIDAD | X | y | Amplitud sd1 | Amplitud SD2 | | | | | | |
|---|
21775 | -22285.12 | -6664.55 | 2950 | 0 |
21799 | -17723.33 | 7946.01 | 0 | 5050 |
-Eric
¿El par X, Y, redondeado a, digamos, 2 lugares decimales, determina el "nombre" de la señal? Si es así, usar los valores redondeados como una clave para una matriz asociativa podría ser un enfoque para contar las ocurrencias de pares similares.
cuentas = matriz asociativa ();
cuentas << SetDefaultValue (0);
cuentas [char (round (pi (), 2)) || "," || char (round (e (), 2))] + = 1;
espectáculo (cuenta);
cuenta = ["3.14,2.72" => 1, => 0];