¿Cómo encontrar de manera eficiente la primera posición en un rango específico de datos que cumpla con los requisitos?Por ejemplo, Gran Clase.jmp
Los pasos de cálculo son:
if(row()>30,contains(:height[Index(1,30)],abs(:height[Index(1,30)]-:height)<3))
Si el número de líneas es superior a 30,
compare los datos con la diferencia de valor absoluto entre la altura de las líneas 1 a 30 y la altura de esta línea es menor o igual a 2, y calcule primero el número de líneas 1 a 30 que cumplen las condiciones anteriores.

¡Gracias expertos!
secuencias de comandosRe: ¿Cómo encontrar de manera eficiente la primera posición en un rango específico de datos que cumple con los requisitos?Gracias a los expertos por su ayuda. A través del estudio de estos métodos, conozco métodos más eficientes.Re: ¿Cómo encontrar de manera eficiente la primera posición en un rango específico de datos que cumple con los requisitos?Si he entendido la pregunta correctamente, esto podría funcionar (usando Loc y subíndices de matriz):
If(Row() > 30,
m = Loc(Abs((:height << get as matrix)[1::30] - :height) < 3, 1);
If(N Items(m) > 0,
m[1],
.
)
);
Ejemplo completo con Big Class:
Ver más...Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << New Column("pos", Numeric, Continuous, Formula(
If(Row() > 30,
m = Loc(Abs((:height << get as matrix)[1::30] - :height) < 3, 1);
If(N Items(m) > 0,
m[1],
.
)
);
)); Re: ¿Cómo encontrar de manera eficiente la primera posición en un rango específico de datos que cumple con los requisitos?Hola @lwx228 ,
No estoy seguro de que esto sea mejor que su fórmula, pero aquí hay otra forma de hacer lo mismo (creo).Tenga en cuenta que esto será lento para tablas más grandes; si está tratando con muchas filas, podría crear una tabla de búsqueda con el número de fila deseado correspondiente a todos los valores posibles de altura y luego unirlo a la tabla.

If( Row() > 30,
firstrowmatch = 0;
For( r = 1, r <= 30 & firstrowmatch == 0, r++,
mtch = Contains( Index( :height - 2, :height + 2, 1 ), :height[r] );
If( mtch > 0,
firstrowmatch = r
);
);
firstrowmatch;
)
Re: ¿Cómo encontrar de manera eficiente la primera posición en un rango específico de datos que cumple con los requisitos?Probé este estúpido método y obtuve resultados. Pregúntele a los expertos. ¿Se puede simplificar esta fórmula?
¡Gracias!
If( Row() > 30,
r1 = Contains( height[Index( 1, 30 )], height + 2 );
r2 = Contains( height[Index( 1, 30 )], height + 1 );
r3 = Contains( height[Index( 1, 30 )], height );
r4 = Contains( height[Index( 1, 30 )], height - 1 );
r5 = Contains( height[Index( 1, 30 )], height - 2 );
Min( If( r1 == 0, 99, r1 ), If( r2 == 0, 99, r2 ), If( r3 == 0, 99, r3 ), If( r4 == 0, 99, r4 ), If( r5 == 0, 99, r5 ) );
)
