如何有效率地找到指定範圍的資料中第一個符合要求的位置?例如,Big Class.jmp
計算步驟為:
if(row()>30,contains(:height[Index(1,30)],abs(:height[Index(1,30)]-:height)<3))
如果行數大於30,
將資料與第 1 -- 30 行的高度差的絕對值與本行高度小於或等於 2 的行進行比較,計算出首先滿足上述條件的第 1 -- 30 行的數量。

感謝專家!
進階統計建模品質和工藝工程Re: 如何有效率地找出指定範圍的資料中第一個符合要求的位置?感謝專家們的幫忙。 透過這些方法的學習,我知道了更有效的方法。Re: 如何有效率地找出指定範圍的資料中第一個符合要求的位置?如果我正確理解了這個問題,這可能會起作用(使用 Loc 和矩陣下標):
If(Row() > 30,
m = Loc(Abs((:height << get as matrix)[1::30] - :height) < 3, 1);
If(N Items(m) > 0,
m[1],
.
)
);
Big Class 的完整範例:
看更多... Re: 如何有效率地找出指定範圍的資料中第一個符合要求的位置?你好@lwx228 ,
我不確定這比你的公式更好,但這是做同樣事情的另一種方法(我認為)。請注意,對於較大的表來說,這會很慢;如果您正在處理許多行,您可以建立一個查找表,其中所需的行號與所有可能的高度值相對應,然後將其連接到表中。

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: 如何有效率地找出指定範圍的資料中第一個符合要求的位置?我嘗試了這個愚蠢的方法,得到了結果。請問專家,這個公式可以簡化嗎?
謝謝!
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 ) );
)
