作为我最后一个问题的同伴......
我需要识别数据表中的最佳窗口,例如,从 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作为关闭主题的解决方案。