如何根据基值的位置计算相对值?大家好,
我需要计算列值的百分比份额值1基于列中所选值的位置值1 。 举个例子,如果我想根据列中的第二个值来执行此操作值1 (位置 2,或值 2),结果列值1_rel相对值应该如下所示:

此外,可能还有更多数据需要按项目分组,然后为每个项目计算所有其他值的百分比份额(可能标准化或相对值是一个有点令人困惑的术语)。 我怎样才能做到这一点? 如果解释得不够好,请原谅并随时提问。
感谢你并致以真诚的问候
分享和交流结果回复:如何根据基值的位置计算相对值?嗨布雷迪,
希望这是允许的,即使最初的问题已经得到解答。
我和卢卡斯有类似的问题,我一直在尝试调整你的(非常好的)答案以适应我的问题。
基本上,我也尝试将一列单独划分,但是我没有使用第二列(或第 k 列)作为参考,而是有第三列名为 label 的列,我想用它来查找参考点。 我遇到的问题是,我无法弄清楚如何让“by-loop”在我的情况下工作,我的脚本现在所做的就是将每个值除以名为“big”的第一个值(我明白为什么,但是不是如何修复它)。
c << new column("Rel", numeric, continuous, formula(
Eval(
Eval Expr(
:Val[(:Group << get data table) << get rows where(
label == "big" & :Group == Expr( :Group[Row()] )
)] / :Val
)
));
)
/V
回复:如何根据基值的位置计算相对值?嗨布雷迪,非常感谢您的代码和解释。 它工作完美。 此致回复:如何根据基值的位置计算相对值?你好,
您可以在新列中使用这个公认的复杂公式(也许有人会提出一个更简单的公式):
Eval(
Eval Expr(
:Val[(:Group << get data table) << get rows where(
Col Cumulative Sum( 1, :Group ) == 2 & :Group == Expr( :Group[Row()] )
)] / :Val
)
)
至少值得稍微拆解一下。
Eval( Eval Expr( )) 构造用于强制计算表达式 Expr ( :Group[Row()] )。 如果没有这个,每行将返回几个值......每组一个。 通过删除 Eval ( Eval Expr ()) 包装器和 Expr() 包装器来尝试一下,看看我的意思。
为了确定我们将在比率中使用的值,我们需要获取当前组中的第二行。 要找到这一行,我们必须匹配组(获取行 where 子句的第二部分),并且还必须匹配组内的第二个值。 执行此操作的一个简单方法是查看按 :Group 分组的一列 1 的累积和。 当该列 == 2 时,我们得到某个组的第二个值。 这种情况发生在多行中,但子句的第二部分将结果限制为与当前行的组匹配的组。 这样,表甚至不需要按组或值排序。
将累积和等值中的 2 更改为 k,允许您使用组中的第 k 个值而不是第 2 个值。
干杯,
布雷迪

回复:如何根据基值的位置计算相对值?谢谢您的评论。 是的,在帖子的前一个版本中,表格中的值为零,但我认为这可能有点令人困惑,所以我认为也许询问从每个项目组的第二行获取值来计算所需的值会更简单。 是的,Param1 列中的“零”仅用于确定行号。回复:如何根据基值的位置计算相对值?值1_rel可以是公式列。
我不确定根据您的示例数据该公式是什么。
通常我期望相对于平均值值1 -参数1 , 或者值1 - 0 ,但都不符合示例。
编辑:我认为公式值1_rel与您的数据匹配的是 2 /值1 。 您可以将其放入列公式中。 但...
我怀疑你从某个地方有零,并且想从零查找行号 2。 JMP 数据表通常排列为同一行上的所有数据。 将 Param 值作为 Value 列的列属性可能是有意义的。 这将需要更多的 JSL 脚本,但可能会更好地反映数据的组织。