Come trovare in modo efficiente la prima posizione in un determinato intervallo di dati che soddisfa i requisiti?Ad esempio, Big Class.jmp
Le fasi di calcolo sono:
if(row()>30,contains(:height[Index(1,30)],abs(:height[Index(1,30)]-:height)<3))
Se il numero di righe è maggiore di 30,
confrontare i dati con la differenza in valore assoluto tra l'altezza delle righe 1 -- 30 e l'altezza di questa riga è minore o uguale a 2 e calcolare prima il numero di righe 1 -- 30 che soddisfano le condizioni di cui sopra.

Grazie Esperti!
SceneggiaturaRe: Come trovare in modo efficiente la prima posizione in un determinato intervallo di dati che soddisfa i requisiti?Grazie agli esperti per il loro aiuto. Attraverso lo studio di questi metodi, conosco metodi più efficienti.Re: Come trovare in modo efficiente la prima posizione in un determinato intervallo di dati che soddisfa i requisiti?Se ho capito correttamente la domanda, questo potrebbe funzionare (usando Loc e indicizzazione matrice):
If(Row() > 30,
m = Loc(Abs((:height << get as matrix)[1::30] - :height) < 3, 1);
If(N Items(m) > 0,
m[1],
.
)
);
Esempio completo con Big Class:
Visualizza di più...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: Come trovare in modo efficiente la prima posizione in un determinato intervallo di dati che soddisfa i requisiti?Ciao @lwx228 ,
Non sono sicuro che questo sia migliore della tua formula, ma ecco un altro modo per fare la stessa cosa (credo).Nota che questo sarà lento per i tavoli più grandi; se hai a che fare con molte righe I potresti creare una tabella di ricerca con il numero di riga desiderato corrispondente a tutti i possibili valori di altezza e quindi unirla alla tabella.

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: Come trovare in modo efficiente la prima posizione in un determinato intervallo di dati che soddisfa i requisiti?Ho provato questo metodo stupido e ho ottenuto risultati. Chiedi agli esperti Questa formula può essere semplificata?
Grazie!
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 ) );
)
