行迭代并创建新列你好
我正在尝试创建一个新列来计算AUC。只要动物编号相同,就应计算该值。
到目前为止,我设法创建了一个新列并计算值:
(Data Table( "jmp forum row ite" ) << New Column( "AUC per animal",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
0.5 * (:Name( "VO2(1)-[ml/h/kg]" ) + Lag( :Name( "VO2(1)-[ml/h/kg]" ), -1 )) * (
:Name( "Time since dosing-[hours]" ) - Lag( :Name( "Time since dosing-[hours]" ), 1 ))
)
));
但是当我尝试包括对动物编号的行迭代检查时。相同的jmp告诉我,这不应该结合在一起。
For Each Row( If( :Animal No. == Lag( :Animal No., -1 ), Formula(), "no value" ) );
应该分几个步骤完成还是有更好的方法呢?
回复:行迭代并创建新列你好 @JulieSAppel
最终结果是矛盾的。因为您要告诉Jump在同一栏中输入数字或字符。该程序无法接受。尝试使用缺失值(或零)代替“无值”
回复:行迭代并创建新列我实际上从来没有把那个字符串放在那儿,只是为了证明如果动物没有,该单元应该是空的。与下面的行不同
回复:行迭代并创建新列您遇到的问题是,您试图修改已经具有公式的列的公式,而您真正需要做的是在公式的初始调用中完成所有这些操作。 如果您将初始公式修改为以下公式,我相信您将拥有所需的东西。
Data Table( "jmp forum row ite" ) << New Column( "AUC per animal",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( :Animal No. == Lag( :Animal No., -1 ),
0.5 * (:Name( "VO2(1)-[ml/h/kg]" ) + Lag( :Name( "VO2(1)-[ml/h/kg]" ), -1 )) * (
:Name( "Time since dosing-[hours]" ) - Lag( :Name( "Time since dosing-[hours]" ), 1 )),
.
)
)
);
如果要修改现有列的公式,则必须换出整个公式。 请参阅以下示例:
Data Table( "jmp forum row ite" ) << New Column( "AUC per animal",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
0.5 * (:Name( "VO2(1)-[ml/h/kg]" ) + Lag( :Name( "VO2(1)-[ml/h/kg]" ), -1 )) * (
:Name( "Time since dosing-[hours]" ) - Lag( :Name( "Time since dosing-[hours]" ), 1 ))
)
)
;
wait(5); // pause for 5 seconds to allow for the viewing of the data table with the original formula
:name("AUC per animal") << Formula(
If( :Animal No. == Lag( :Animal No., -1 ),
0.5 * (:Name( "VO2(1)-[ml/h/kg]" ) + Lag( :Name( "VO2(1)-[ml/h/kg]" ), -1 )) * (
:Name( "Time since dosing-[hours]" ) - Lag( :Name( "Time since dosing-[hours]" ), 1 )),
.
)
);回复:行迭代并创建新列非常感谢。这是有道理的(并且效果很好)。
我一直在考虑对每行迭代使用a。为什么这里没有选择呢?
回复:行迭代并创建新列非常感谢。这是有道理的(并且效果很好)。 回复:行迭代并创建新列另外,请注意如何使用Lag()函数。
// previous row
Lag( :Animal No., 1 )
// next row
Lag( :Animal No., -1 )
+1的延迟会访问上一行。-1滞后访问下一行。