作為我最後一個問題的同伴......
我需要識別資料表中的最佳窗口,例如,從 Samples/Data/Functional Data/Weekly Weather Data.jmp 中,我需要識別 STATION 具有最高 TMAX 的 X 連續行(移動視窗)。不確定是使用平均值最高的窗口還是最小值最低的窗口,所以我想知道如何同時執行這兩個操作。
和以前一樣,我確信有一種方法可以使用 JSL 來完成此操作,但如果可能的話,我更願意使用函數。
我已經用 Col Moving Average() 和 Col Rank() 嘗試了很多東西,但不知何故感覺遙不可及。
我一定誤解了你的問題,但聽起來你只想按站列出最大列 - 請參閱附件中的最後一列和存儲的腳本將結果製成表格。但我懷疑你的意思是別的,我不明白你所說的「移動視窗」是什麼意思。
不,我希望建立一個列,其中 X 連續行旁邊有一個“1”,例如 4 個連續行,這 4 行中另一列的最小值是最大的。
如果您能提供您正在尋找的最終結果的範例,將會很有幫助。
結合起來怎麼樣麥克斯上校(尋找高峰)與移動平均線(拉伸搜尋視窗)
另外:
- 若要標記峰值位置,請將各個值與最大值進行比較
又快又髒:
- 可能:2場比賽
- 也許[但不太可能]:與另一個站的最大值的錯誤匹配 - 為了每週天氣數據,必須投入一些額外的努力:
對於每個站點,都會缺少幾週 - 因此要在正確的視窗內進行搜索,必須透過 split & stack 通知 Jmp 遺失的資料(因為沒有一周完全遺失)。

dt = Open( "$SAMPLE_DATA/Functional Data/Weekly Weather Data.jmp" );
half_window_size = 2;
dtsplit = dt << Split(
Split By( :week of year ),
Split( :TAVG ),
Group( :STATION ),
Remaining Columns( Drop All )
);
myNames=dt split << get column names();
myNames= myNames[2::Nitems(myNames)];
dtstack = dtsplit <<
Stack(
columns(myNames)
);
New Column( "window",Formula(Col Moving Average( :Data, 1, half_window_size, half_window_size, :STATION )));
New Column( "max_window",Formula( Col Maximum( :window, :STATION ) ));
New Column( "marker",Nominal,Formula( :window == :max_window ));
:Label << Set Data Type(Numeric) << set name ("week of year");
Graph Builder(
Variables(
X( :week of year ),
Y( :Data ),
Y( :window, Position( 1 ) ),
Y( :max_window, Position( 1 ) ),
Group X( :STATION, N View Levels( 1 )),
Overlay( :marker )
),
Elements(
Points( X, Y( 1 ), Overlay( 0 ) ),
Points( X, Y( 2 )),
Smoother( X, Y( 3 ) )
)
)
事實證明,我們的特定問題比我們最初意識到的要複雜得多,因此我們最終用 python 編寫了處理過程,因為我們對此更加熟悉。
我會標記@hogi作為關閉主題的解決方案。