如何计算某些行的几何平均值?几何平均值可以在Summary 中轻松获得。
但是如何通过公式列计算平均值,对吧?
我搜索了帮助文档和社区,仍然没有找到方法。


我想这样计算:
dt=Current Data Table();
dt<<NEW column=""></NEW>
谢谢!
回复:如何计算某些行的几何平均值?另外,我在这里重新链接一篇关于 SAS 文档中的几何平均值的博客文章,该文章内容非常丰富:
https://blogs.sas.com/content/iml/2019/10/02/geometric-mean-deviation-cv-sas.html
回复:如何计算某些行的几何平均值?我认为这里的一个有用策略是使用 JMP 中的“NRows()”函数来调用行号上的索引,如果您对通常在汇总统计中报告的一般几何平均数计算感兴趣(并且是一个) JMP 在自定义汇总统计下报告)。


我能够总结(重现)该线程中使用的两种方法,并且我将数据表包含在通用数据集中,以供任何人将来参考。干杯, @帕特里克朱利亚诺
回复:如何计算某些行的几何平均值?谢谢@朱利安
我试图一次性完成这一切,但没有让它像下面的图片那样工作:

回复:如何计算某些行的几何平均值?你好@ron_horne ,
对于你的问题:“有没有办法将第一个 ln 转换嵌入到第二个公式中,从而保存 2 列过程。”
起初,我认为我们可以使用 Transform Column() 做一些事情,就像我们为平台启动编写脚本一样,例如:
Transform Column( "Log[height]", Formula( Log( :height ) ) )
但是,将其嵌入到列公式中却无济于事。 然而,:高度[指数(排()- 10 ,排() )] 将返回一个矩阵,并将其包装在 Ln() 中将评估每个项目,因此以下内容应给出解决方案的单列版本:
New Column("Geometric mean height (single column)", Numeric, "Continuous", Format("Best", 12), Formula(If(Row() < 10, Empty(), Exp(Mean(Ln(:height[Index(Row() - 10, Row())]))))) );

@朱利安
回复:如何计算某些行的几何平均值?你好@lwx228 ,
你的问题问得好,一定有几种方法可以得到答案。我会尝试坚持使用列公式。
创建两个新列。
1 只需将高度转换为其自然对数即可。
2 获取第一列移动平均线的指数。
第二列应该为您提供您正在寻找的移动几何平均值。
您可以从这段脚本中获取公式:
New Column( "log height",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Ln( :height ) )
);
New Column( "Geometric mean height",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() < 10,
Empty(),
Exp( Mean( :log height[Index( Row() - 10, Row() )] ) )
)
)
);
请告诉我们它是否适合您。
我还想请问论坛的其他成员是否有办法将第一个 ln 变换嵌入到第二个公式中,从而节省 2 列过程。
回复:如何计算某些行的几何平均值?我用的是原来的方法,结果是一致的。

谢谢吉姆!
回复:如何计算某些行的几何平均值?我不知道 JMP 中有几何平均函数。应该添加一项,我建议您将其添加到 JMP WishList 中。然而,这并不意味着人们不能做你想做的事。我想出了两种不同的解决方案。第一个是 JSL 中几何平均值的原始编码。在附加的数据表中,名为 GeoMean 的列使用该公式。它使用您的请求来计算当前行 - 10 行到当前行的几何平均值。
If( Row() == 1,
Product = 1;
Range = 11;
);
If( Row() <= 11,
Product = Product * :height;
If( Row() == Range,
Returned = Product ^ (1 / Range),
Returned = .
);
,
Product = Product / :height[Row() - Range];
Product = Product * :height[Row()];
Returned = Product ^ (1 / Range);
);
Returned;
第二种形式是 Dist Platform 中名为 Geomean 的列,它从 Distribution Platform 的输出中提取几何平均值,在数据子集上运行,一次对 11 行进行子集化
If( Row() < 11,
returned = .,
theValues = :height[Index( Row(), Row() - 10 )];
_d = New Table( "sub", invisible, New Column( "height", values( theValues ) ) );
dis = _d << Distribution(
invisible,
Continuous Distribution(
Column( :height ),
Quantiles( 0 ),
Histogram( 0 ),
Vertical( 0 ),
Outlier Box Plot( 0 ),
Customize Summary Statistics(
Mean( 0 ),
Std Dev( 0 ),
Std Err Mean( 0 ),
Upper Mean Confidence Interval( 0 ),
Lower Mean Confidence Interval( 0 ),
N( 0 ),
Geometric Mean( 1 )
)
)
);
Returned = (Report( dis )[Number Col Box( 1 )] << get)[1];
Close( _d, nosave );
);
Returned;
第一个公式应该是最快的,因为它不会从头开始计算每行的 Geomean。