如何创建两个嵌套循环?您好 - 我正在尝试编写一个遵循此工作流程的脚本:
1 - 在某个开始日期时间(例如 2021 年 10 月 1 日上午 11:00)开始循环。我将其称为第 n 行。从 col1[row n] 获取值。
2 - 转到下一行,n+1。设置 col2 = col1 [n+1] - col1[n]。
3 - 转到下一行,n+2,设置 col2 = col1 [n+2] - col1[n]
4 - 转到下一行,n+3,设置 col2 = col1[ n+3] - col1[n]。继续循环遍历后续的每一行,直到 datetime[n+k] = datetime[n] + 7 天。(请注意,随着循环的进行,k 将根据行之间的时间增量而变化;例如,时间从一行到下一行增加 5 分钟、15 分钟、1 小时等,具体取决于所讨论的行。)
5 - 使用步骤 4 中获得的新“开始日期”,对每个新周的数据重复步骤 1 至 4。继续循环另外 7 天的数据。
6 - 重复步骤 5,直到数据表用完行。
目标是对 col1 数据进行计算,将一周的行值与该周的第一行进行比较,然后在随后的每一周(第 2 周、第 3 周、第 4 周等)一遍又一遍地重复此操作,直到所有行已被处理。:)
质量和工艺工程回复:如何创建两个嵌套循环?谢谢文斯!这会很有帮助。我想我现在走在正确的轨道上。:)
回复:如何创建两个嵌套循环?好吧,听起来你是在说
每个流量减去每天最早的流量点?这就是你想做的事?我这么猜测是因为我不认为上午 13:15 是一回事。:D
Names default to here(1);
dt = current data table(); // this assumes your table
// I'm going to make a bunch of extra columns to kind of show you smaller steps
// we really want to be able to say, This is the first row of the day
// so let's make a date column
dt << New Column("Just Date", <<FORMULA></FORMULA>
一旦你有了当天最小的行,你只需要对最后一个新列进行多次计算,就可以计算出差异的数量。
希望我没有让事情变得过于复杂,因为我绝对没有回答您最初的嵌套 for 循环问题。
回复:如何创建两个嵌套循环?我刚刚制作了一个我猜你所说的样本表。我今天刚做到()+每行 1 秒。
我对你的表一无所知,所以我只是让它完成所有列。
我无法理解你原来的帖子。
回复:如何创建两个嵌套循环?该脚本生成了一个包含 5 行和以下 6 列的新表:
第1周,第2周,第3周,第1周比较,第2周比较,第3周比较。
(这 5 行的日期时间为 10/13/2021 8:18:05 AM 到 10/13/2021 8:18:09 AM。)
我试图在现有表中只保留一个新列,该列包含我原来的帖子中描述的计算结果。我将拥有所有原始数据表行以及根据我原始帖子中的描述计算的一个新列。
回复:如何创建两个嵌套循环?作为上下文,如果有帮助的话,附上我的实际 JMP 表。(我想根据“Pred Formula LOG_ECOLI_PEAR”列进行计算。)
回复:如何创建两个嵌套循环?谢谢你文斯。我现在正在经历这个……作为 JSL 新手(!),我有几个问题可以帮助我遵循您的方法。为什么要向新数据表添加 5 行?为什么需要“设定值”以及为什么选择这五个数字?你的脚本持续 3 周,但我的实际数据集大约有 120 周。
最后,脚本如何知道哪一列是要计算的值(即我的示例中的“流”)?(我的数据表的列数比示例中显示的三列多。)分配列名而不是切换列不是更容易吗?我可能在这里遗漏了一些东西。
回复:如何创建两个嵌套循环?当然。谢谢。附件是我在 Excel 中创建的数据集片段作为示例。
回复:如何创建两个嵌套循环?我想你可能会说这样的话?
Names default to here(1);
dt = New Table( "Untitled 1133",
Add Rows( 5 ),
New Column( "Week1",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
),
New Column( "Week2",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
),
New Column( "Week3",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
)
);
nc = ncols(dt);
for(i=1, i<=nc, i++,
col_name = column(i) << Get Name(); // get the original column name
Eval(EvalExpr( // you have to do this so you can substitute in the actual col_name instead of a variable
dt << New Column(col_name || " comparison",
// just take current row minus first row
formula(Expr(column(dt, col_name))[row()]-Expr(column(dt, col_name))[1])
)
));
);
回复:如何创建两个嵌套循环?你能给出一个小数据表,其中包含你期望的数据吗?或者至少您使用的数据表是什么样子的? 听起来列公式是一个更简单的解决方案。