日期大家好,
我有一個像這樣的數據庫(這是這裡的摘要):

該數據庫來自迄今為止運行良好的腳本,但是最後一列將允許計算與其他列不同的最後持續時間。
最後一列中的值表示對應於對象的 OP。
例如,對於第一行:值 60 對應於對象 2041,我們需要一個公式,允許每行持續時間 2041 = 結束日期 2041 - 開始日期 2041,依此類推。
當該值等於 0 時,我們可以將值 0 分配給持續時間 2041。
等等..
我從下面的腳本開始:
Names Default To Here(1);
dt = current data table();
If( !Is Missing(:"valeur ST1-2"n),
For Each Row(
idx = dt[row(), :"valeur ST1-2"n]
dt[idx, durée[idx]] = dt[idx, date fin[idx]] - dt[idx, date début[idx]];
),
0
);
數據存取回覆:日期這是我用來完成你想要的事情的腳本。
Names Default To Here( 1 );
dt = Current Data Table();
// Set the display format to a JMP Duration format
:"valeur ST1-2"n << format("hr:m:s");
// Loop through the rows and assign the new values
For Each Row(
If( :"valeur ST1-2"n != 0,
:"valeur ST1-2"n = :Date fin 2041 -
:Date début 2041,
:"valeur ST1-2"n = 0
)
);回覆:日期- 如何知道值 60 對應 2041,值 82 對應 2000?valeur ST1-2 值為 68 會做什麼?
- 提供的範例資料表沒有 2000 年日期的欄位。
- 如果決定使用哪些欄位的規則是可辨別的,或者如果提供了 ST1-2 值的清單以及用於不同值的欄位。
回覆:日期此處資料庫已縮小,但對於列 ST1-2 中的每個值,值列可以在 OP 值和每個物件之間建立連結(在縮小的資料庫中,這些是列 711-2041-9916)。
值 60 對應於 2041,因為在第一行:

每行如此… 對於對應於 2000 的 82,這只是另一個範例,但這意味著在第二行上,列 2000 將由值 82 填入。
回覆:日期感謝你的回覆 !
這適用於第一行,但「ST1-2 值」列中的值會發生變化,因此隨後必須重新計算的持續時間不同。
例如,對於第 3 行:ST1-2 值 = 82 且 82 對應於物件 2000,因此我們應該為第 3 行設定持續時間 2000 = 結束日期 2000 - 開始日期 2000
這是在中間資料庫中概述 OP 與每個物件的分配的目的(相應 OP 內的列 711-2041-9916)。
目標是取代持續時間列,「ST1-2 值」列不會被修改。
我的腳本無法正常運作:
Names Default To Here(1);
dt14 = current data table();
dur_cols = Filter Each( {col_name}, dt14 << Get Column Names( "String", Continuous ),
Starts With( col_name, "Durée" )
);
fin_cols = Filter Each( {col_name}, dt14 << Get Column Names( "String", Continuous ),
Starts With( col_name, "Date fin" )
);
debut_cols = Filter Each( {col_name}, dt14 << Get Column Names( "String", Continuous ),
Starts With( col_name, "Date d" )
);
// for indexing later
num_colnr = Transform Each( {col_name}, dur_cols, Word( -1, col_name ) );
// Loop through the rows and assign the new values
For Each Row(
If( :"valeurs ST1-2"n != 0,
colidx = Loc(dt14[row(), num_colnr ] == :"valeurs ST1-2"n);
If( N items (colidx) > 0,
dt14[colidx,dur_cols] = Eval(dt14[colidx,fin_cols] - dt14[colidx,debut_cols]);
,
continue()
);
,
continue()
);
//show(colidx);
);
回覆:日期我認為下面的腳本可以滿足您的需求,或至少接近您想要的
Names Default To Here( 1 );
dt14 = Current Data Table();
Lookup = Filter Each( {col_name}, dt14 << Get Column Names( "String", Continuous ),
Num( col_name ) > 0
);
dtArray = dt14 << Stack(
invisible,
columns( Lookup ),
Source Label Column( "theKeys" ),
Stacked Data Column( "valeur ST1-2" ),
Drop All Other Columns( 1 ),
Output Table( "Untitled 45.jmp" )
);
dtArray << delete rows( dtArray << get rows where( Is Missing( :"valeur ST1-2"n ) ) );
theLookup = Associative Array(
dtArray:"valeur ST1-2"n << get values,
dtArray:theKeys << get values
);
Close( dtArray, nosave );
// Loop through the rows and assign the new values
For Each Row(
row = Row();
If( :"valeur ST1-2"n != 0,
lookup = theLookup[:"valeur ST1-2"n];
If( :"valeur ST1-2"n == As Column( lookup ),
As Column( "Durée " || theLookup[:"valeur ST1-2"n] ) =
Num(
As Column( "Date fin " || theLookup[:"valeur ST1-2"n] )
-As Column( "Date début " || theLookup[:"valeur ST1-2"n] )
);
Continue();
);
,
Continue()
);
);回覆:日期感謝你的回覆 !
這似乎適用於前兩行,但是當 ST1-2 值更改時會出現錯誤。
我們注意到,對於第 4 行,持續時間 2231 為零,而結束日期 2231 - 開始日期 2231 應該存在差異(因為在第 4 行,ST1-2 值的值為 82,並且 82 對應於物件 2231)。

這是我收到的錯誤訊息:

也許在表“TheLookup”中存在不一致,因為對象可以分配給不同的OP。
例如下面的範例:我們看到對於“theKeys”= 2041,值“ST1-2 value”等於“60”和“47”

回覆:日期為了確定鍵,將所有名為 2041、711、2231 的列放在一起,並建立一個關聯數組,當在列值 ST1-2 中找到數字 60 時,它將在關聯數組中查找並返回 2241。如果輸入47,它也會回傳2241。如果找到82,則回傳2231。我假設在 2041、711、2231 等列中找到的數字具有可以在 valeur ST1-2 中找到的各種數字。
如果您可以附上您正在使用的範例資料表,我將嘗試找出您所看到的問題。