Wie finde ich effizient die erste Position in einem bestimmten Datenbereich, die den Anforderungen entspricht?Beispiel: Große Klasse.jmp
Die Berechnungsschritte sind:
if(row()>30,contains(:height[Index(1,30)],abs(:height[Index(1,30)]-:height)<3))
Wenn die Anzahl der Zeilen größer als 30 ist,
vergleiche die Daten mit der Absolutwertdifferenz zwischen der Höhe der Zeilen 1–30 und die Höhe dieser Zeile ist kleiner oder gleich 2, und berechne zuerst die Anzahl der Zeilen 1–30, die die obigen Bedingungen erfüllen.

Danke Experten!
SkripterstellungBetreff: Wie finde ich effizient die erste Position in einem bestimmten Datenbereich, der den Anforderungen entspricht?Danke an die Experten für ihre Hilfe. Durch das Studium dieser Methoden kenne ich effizientere Methoden.Betreff: Wie finde ich effizient die erste Position in einem bestimmten Datenbereich, der den Anforderungen entspricht?Wenn ich die Frage richtig verstanden habe, könnte dies funktionieren (mit Loc und Matrix-Subskription):
If(Row() > 30,
m = Loc(Abs((:height << get as matrix)[1::30] - :height) < 3, 1);
If(N Items(m) > 0,
m[1],
.
)
);
Vollständiges Beispiel mit Big Class:
Mehr sehen... Betreff: Wie finde ich effizient die erste Position in einem bestimmten Datenbereich, der den Anforderungen entspricht?Hi @lwx228 ,
Ich bin mir nicht sicher, ob dies besser ist als Ihre Formel, aber hier ist eine andere Möglichkeit, dasselbe zu tun (glaube ich).Beachten Sie, dass dies bei größeren Tabellen langsam sein wird; Wenn Sie mit vielen Zeilen zu tun haben, können Sie eine Nachschlagetabelle mit der gewünschten Zeilennummer erstellen, die allen möglichen Höhenwerten entspricht, und sie dann mit der Tabelle verbinden.

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;
)
Betreff: Wie finde ich effizient die erste Position in einem bestimmten Datenbereich, der den Anforderungen entspricht?Ich habe diese dumme Methode ausprobiert und Ergebnisse erzielt. Fragen Sie die Experten. Kann diese Formel vereinfacht werden?
Vielen Dank!
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 ) );
)
