Comment trouver efficacement la première position dans une plage de données spécifiée qui répond aux exigences ?Par exemple, Big Class.jmp
Les étapes de calcul sont :
if(row()>30,contains(:height[Index(1,30)],abs(:height[Index(1,30)]-:height)<3))
Si le nombre de lignes est supérieur à 30,
comparez les données avec la différence de valeur absolue entre la hauteur des lignes 1 à 30 et la hauteur de cette ligne est inférieure ou égale à 2, et calculez le nombre de lignes 1 à 30 qui remplissent les conditions ci-dessus en premier.

Merci Experts !
ScriptRe : Comment trouver efficacement la première position dans une plage de données spécifiée qui répond aux exigences ?Merci aux experts pour leur aide. Grâce à l'étude de ces méthodes, je connais des méthodes plus efficaces.Re : Comment trouver efficacement la première position dans une plage de données spécifiée qui répond aux exigences ?Si j'ai bien compris la question, cela pourrait fonctionner (en utilisant Loc et l'indice matriciel):
If(Row() > 30,
m = Loc(Abs((:height << get as matrix)[1::30] - :height) < 3, 1);
If(N Items(m) > 0,
m[1],
.
)
);
Exemple complet avec Big Class :
Voir plus... Re : Comment trouver efficacement la première position dans une plage de données spécifiée qui répond aux exigences ?Salut @lwx228 ,
Je ne suis pas sûr que ce soit mieux que votre formule, mais voici une autre façon de faire la même chose (je pense).Notez que cela sera lent pour les grandes tables ; si vous avez affaire à de nombreuses lignes, vous pouvez créer une table de recherche avec le numéro de ligne souhaité correspondant à toutes les valeurs de hauteur possibles, puis la joindre à la table.

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 : Comment trouver efficacement la première position dans une plage de données spécifiée qui répond aux exigences ?J'ai essayé cette méthode stupide et j'ai obtenu des résultats. Demandez aux experts Cette formule peut-elle être simplifiée ?
Merci!
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 ) );
)
