条件公式我正在尝试添加一个以其他列为条件的列公式。 我有数据,其中“结果”列由“主题”和“产品”堆叠,在“时间”上具有多个值。 我正在尝试计算“结果”中每个值的基线,以便:
新列 =“结果”– [“结果”值,其中针对特定主题/产品组合,时间=(1)]
谢谢
自动化和脚本编写回复:条件公式你能举个数据例子吗?这将有助于找到适当的解决方案。
回复:条件公式如果您的数据按主题、产品、时间排序,那么此示例将有效
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
dt:age << set name( "Subject" );
dt:sex << set name( "Product" );
dt:weight << set name( "Results" );
dt << New Column( "baseline",
formula(
If( Row() == 1,
valueTime1 = :Results,
If( :Subject != Lag( :subject ) | :Product != Lag( :product ),
valueTime1 = :Results
)
);
baseline = :Results - valueTime1;
)
);回复:条件公式我已经包含了示例数据。 我需要添加一个新列,其中公式采用每个主题/产品组合的时间(-5)结果值,并从主题/产品组合中的每个结果中减去该值。
回复:条件公式有时,通过几个步骤解决此类问题比为列公式编写复杂的 jsl 更容易。 这是一种使用“子集”提取 Time=-5 行,使用“更新”将它们连接回原始数据表的方法,然后在列公式中执行简单的减法。 如果您正在运行 JMP 17,工作流程是构建和共享此类内容的好方法。
回复:条件公式我想出的 JSL 并不太复杂。我没有写公式,而是写了表格脚本。每当添加更多数据时,您都可以运行它。
dt = Current Data Table();
OffsetArray = Associative Array();
TimeRows = dt << Get Rows Where( :Time == -5 );
For Each( {val, idx}, TimeRows, OffsetArray[:Subject[val] || :Product[val]] = :Results[val] );
For Each Row( dt, :New Column = :Results - OffsetArray[:Subject || :Product] );编辑
仔细查看表格后,我注意到一些:结果单元格中缺少值。您应该将它们重新编码为 0 或稍微更改脚本:
dt = Current Data Table();
OffsetArray = Associative Array();
TimeRows = dt << Get Rows Where( :Time == -5 );
For Each( {val, idx}, TimeRows, OffsetArray[:Subject[val] || :Product[val]] = If( !Is Missing( :Results[val] ), :Results[val], 0 ) );
For Each Row( dt, :Results with Offset = :Results - OffsetArray[:Subject || :Product] );
回复:条件公式只是猜测,因为没有数据可以测试这一点
:Result - Col Min(If(:Time == 1, :Result, .), :Group);
编辑:
我们收到样本数据后更新了公式
:Results - Col Min(If(:Time == -5, :Results, .), :Subject, :Product)