行操作For(x=1,x<=N Rows(dt),x++,
If(IsMissing(Column( dt, "Actual Finish Date_" )[x]),
Column( dt, "bouge pas" )[x] = Column( dt, "Operation Due Date_" )[x] - :Operation Start Date_ [x-1],
Column( dt, "bouge pas" )[x] = Column( dt, "Actual Finish Date_" )[x] - :Actual Execution Start Date_ [x]
);
);
您好,我的問題是我想在 for 的第一行中,將 x-1 行用於列:Operation Start Date_ 但此語法不起作用? 謝謝
進階統計建模實驗設計品質和工藝工程回覆:行操作如果第一行的實際完成日期為空,那麼您的腳本將查找上一行,這將不起作用。您需要將此行替換為不引用前一行的內容:
:"bouge pas"n = :"Operation Due Date_"n - :Operation Start Date_[Row() - 1],
回覆:行操作
例如,第 2, 3 4 行...結果是 6 天,而實際上應該是 1 天
回覆:行操作For Each Row(dt,
If(Is Missing(:"Actual Finish Date_"n),
:"bouge pas"n = :"Operation Due Date_"n - :Operation Start Date_[Row() - 1],
"bouge pas"n = :"Actual Finish Date_"n - :Actual Execution Start Date_
);
)

它仍然不起作用,因為從第一行開始,我的列中就有空行:實際完成日期_,我不知道該怎麼做
回覆:行操作如果缺少第 1 行的「實際完成日期」值,則目前建議的腳本都不起作用。因此,這個問題需要處理。下面的程式碼,對原始 JSL 進行簡單修改即可運作。
注意:我在原始版本的程式碼上犯了一個邏輯錯誤。我已經在下面更改了它。
For( x = 1, x <= N Rows( dt ), x++,
If( Is Missing( Column( dt, "Actual Finish Date_" )[x] ),
If( Row() > 1,
Column( dt, "bouge pas" )[x] = Column( dt, "Operation Due Date_" )[x] - :Operation Start Date_[x - 1],
Column( dt, "bouge pas" )[x] = 0; // Set the value if there is not an X-1 row (i.e. row 1)
),
Column( dt, "bouge pas" )[x] = Column( dt, "Actual Finish Date_" )[x] - :Actual Execution Start Date_[x]
);
);
回覆:行操作如果您正在循環資料表的行(通常我會嘗試避免它並使用公式或設定每個值),我建議使用 For Each Row() 而不是 For()。 如果沒有示例數據,我猜問題可能是您將獲得 0 作為行號,這在 JMP 中無效(存取或評估 ':Operation Start Date_[ /*###*/x - 1]' 、 :Operation Start Date_[/*###*/x - 1] 時第 2 行的行號無效)
嘗試手動設定 x 值並查看所得的結果,新增偵錯列印並查看日誌
這是一個範例腳本,其中包含有關如何設定 bouge pas 列值的幾個可選想法
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(3),
New Column("Actual Finish Date_", Numeric, "Continuous", Format("Best", 12), Set Values([1, 4, 6])),
New Column("Actual Execution Start Date_", Numeric, "Continuous", Format("Best", 12), Set Values([0, 2, 3])),
New Column("Operation Start Date_", Numeric, "Continuous", Format("Best", 12), Set Values([10, 21, 32])),
New Column("Operation Due Date_", Numeric, "Continuous", Format("Best", 12), Set Values([11, 22, 33])),
New Column("bouge pas", Numeric, "Continuous")
);
For(x = 1, x <= N Rows(dt), x++,
If(Is Missing(Column(dt, "Actual Finish Date_")[x]),
Column(dt, "bouge pas")[x] = Column(dt, "Operation Due Date_")[x] - :Operation Start Date_[x - 1],
Column(dt, "bouge pas")[x] = Column(dt, "Actual Finish Date_")[x] - :Actual Execution Start Date_[x]
);
);
/* better option in my opinion
For Each Row(dt,
If(Is Missing(:"Actual Finish Date_"n),
:"bouge pas"n = :"Operation Due Date_"n - :Operation Start Date_[Row() - 1],
"bouge pas"n = :"Actual Finish Date_"n - :Actual Execution Start Date_
);
);
*/
/* usually best option
Column(dt, "bouge pas") << Set Each Value(
If(Is Missing(:"Actual Finish Date_"n),
:"Operation Due Date_"n - :Operation Start Date_[Row() - 1],
:"Actual Finish Date_"n - :Actual Execution Start Date_
);
);
*/