使用 JSL 公式中使用的特定行值我想做一些我很久以前在 VB 中学到的东西,但在 JMP 脚本语言方面遇到了困难。 我是 JMP 新手。
我想在公式中运行 For 循环,但使用元胞数组。
例如,我知道我可以按如下方式引用一列: j = Column ("a");
如果我说 j[4] = 77 + 2;我将在第 4 行“a”列中得到值 79。
但是,如果我想在“a”列上运行循环,例如 For(i=1,i<=20,i++,一些公式的使用j[i]);
在附件中,我想将 B 列行 [1] 与 C 列的第 1 至 5 行一起使用。 然后,B 列行 [6] 与 C 列的第 6 至 10 行。 我的目标是使用 Column-A 中的序列作为标识符,因此每次序列值为 1 时,我都会保留该值以供后续使用该公式 5 次,其中 Column-D 中的内容取决于对内容执行的算术B 列和 C 列。 (例如 Column-D=Column-B-Value + Column-C-Value。)请参阅附件以在图片中了解我的意思。
任何帮助将是巨大的并且非常感激。
回复:在 JSL 公式中使用特定行值最后,我花了一段时间才弄清楚 JMP 脚本的工作方式。 附件显示了我所做的事情,这对我有用。 (该示例与我用来开始讨论的简单示例有所不同。)
如果有人对如何以不同的方式处理此类问题有任何建议,请发表评论。 在基本 VB 编程中使用 for 循环和 if 条件多年,而且对 JMP 还很陌生,这意味着我可能需要指导来更好地理解如何处理 JMP 脚本。
回复:在 JSL 公式中使用特定行值谢谢你,吉姆!
回复:在 JSL 公式中使用特定行值有问题吗?
回复:在 JSL 公式中使用特定行值如果过去 30 天的平均值与目标相比超过 +1 sigma,我将使用此脚本将单元格着色为黄色
为了(我= 1 ,我<= N 行( dt ) ,我++,
如果(柱子( dt , “平均30天” )[我] > ((柱子( dt , “目标” )[我]) +柱子( dt , “标准” )[我] ) ,
柱子( dt , “平均30天” ) <<颜色单元( 9 , {我} )
)
) ;
回复:在 JSL 公式中使用特定行值以下公式适用于您所附的示例
targetrow = (Row() - :Name( "Column-A" )) + 1;
:Name( "Column-B" )[targetrow] + :Name( "Column-C" );
请记住,公式将始终循环遍历所有行,并且 Row() 函数将始终为您提供当前正在处理的行。 在 JMP 中使用公式时,需要了解查看给定行时需要什么结果。 这是与 VB 不同的范例
这是另一个版本,执行您正在寻找的 For 循环
If( :Name( "Column-A" ) == 5,
For( i = Row() - 4, i <= Row(), i++,
:Name( "Column-D" )[i] = :Name( "Column-B" )[Row() - 4] + :Name( "Column-C" )[i]
)
);
// The last value calculated will be the value for the current row,
// so it needs to be handled as a special case
:Name( "Column-B" )[Row() - 4] + :Name( "Column-C" )[Row()];
我想从技术上讲,你可以近似一个VB世界,如果绕过所有行的所有处理,直到检测到最后一行,然后你可以返回并循环程序控制下的所有行...... .这看起来工作量很大
dt=current data table();
If(Row()==N Rows(dt),
<DO whatever="" processing="" you="" want="">
);
<PROCESS for="" the="" current=""></PROCESS></DO>