如何創建兩個嵌套循環?您好 - 我正在嘗試編寫一個遵循此工作流程的腳本:
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])
)
));
);
回复:如何創建兩個嵌套循環?你能給出一個小數據表,其中包含你期望的數據嗎?或者至少您使用的數據表是什麼樣子的? 聽起來列公式是一個更簡單的解決方案。