回复:公式冒號一個問題:為什麼ENT4 包含從2500 開始的持續時間而ENT2 不包含從1749 開始的持續時間?
回复:列公式數據庫出錯,我更新了數據庫!
謝謝你的評論。
回复:列公式感謝你的回复。
我有一句話,在我看來,在您的代碼中,您正在與列 T 的元素進行比較,但是我忘記指定 T 的值可以按任何順序排列(不一定是遞增),以便值操作按推進的升序排列。
例如 :
T = 690 / 運算 = 47
T = 550 / 運算 = 55
進度遵循操作順序!
第二點,在我的數據庫中,我有持續時間 T 的持續時間格式的數值,格式為“h:m:s”。
回复:公式冒號您可以使用公式來執行此操作,但我會使用腳本來執行此操作。 下面是一個至少適用於您的示例數據的示例
Names Default To Here(1);
dt = Open("$DOWNLOADS/Test(1).jmp");
// get duration columns
dur_cols = Filter Each({col_name}, dt << Get Column Names("String", Continuous),
Starts With(col_name, "durée")
);
// for indexing later
num_colnr = Transform Each({col_name}, dur_cols, Output("Matrix"), Num(Word(-1, col_name)));
dt << New Column("DUREE TOT", Numeric, Continuous, << Set Each Value(
colidx = Loc(num_colnr > :T); // indices of num colums larger than :T value
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
));回复:公式冒號如果我理解正確,我的解決方案應該仍然有效。 它僅依賴於 :1500, :1749,... 列與 :duree 1500, :duree 1749,... 列的順序相同的事實。 此外,即使 JMP 在現實中確實向您顯示了格式清晰的持續時間值(我認為),它們仍然是秒(您可以通過將格式更改為最佳來檢查這一點,例如從列設置中)。
回复:列公式我猜代碼中有問題。
這裡的問題在於“colidx”變量的賦值:我們不比較變量 T 的數字,而是比較與這些數字對應的操作(此處為黃色列)。
在上面的示例中,第一行是:
如果第一行“:1500”>第一行“:op”->添加持續時間1500
如果第一行“:1749”>第一行“:op”->添加持續時間1749如果第一行“:2100”>第一行“:op”->添加持續時間2100
如果第一行“:2500”>第一行“:op”->添加持續時間2500
並為每一行執行此操作...
回复:公式冒號所以改變
colidx = Loc(num_colnr > :T);
到
colidx = Loc(num_colnr > :"opé"n);
並對 Loc (使用特定的行而不是列名)和 num_colnr (不需要是數字)進行相應的更改
回复:列公式
感謝您的回答,我已經按照您的指示更改了“colidx”的分配。
但是,我看不出我應該做哪些更改:“並對 Loc(使用特定的行名而不是列名)和 num_colnr(不需要數字)進行相應的更改。”
你能告訴我更多細節嗎?
回复:列公式我使用此代碼修改了 num_colnr 的值以選擇以下所需的列:
SNames = dt << Get Column Names(String, "Nominal");
For(i=1, i <= N Items(Snames), i++,
sclmn = Column(Snames[i]);
顯示(sclmn);
);
此代碼允許我獲取與數據庫黃色部分對應的所有列。
但是,我似乎無法對“Loc”進行相應的更改。
回复:公式冒號Names Default To Here(1);
dt = Open("$DOWNLOADS/Test (1).jmp");
// get duration columns
dur_cols = Filter Each({col_name}, dt << Get Column Names("String", Continuous),
Starts With(col_name, "durée")
);
// for indexing later
num_colnr = Transform Each({col_name}, dur_cols, Word(-1, col_name));
dt << New Column("DUREE TOT", Numeric, Continuous, << Set Each Value(
colidx = Loc(dt[Row(), num_colnr] > :"opé"n);
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
));
數據表下標
回复:列公式在我的數據庫中,我有 900 個不同的列(黃色列),這意味著數字“num_colnr”是一個包含許多數字的列表:

通過執行您與我共享的 JSL 腳本,我得到了這種類型的錯誤:

而上圖的 num_colnr 是一個數字列表
回复:列公式並通過添加“Num”轉換為數字:
num_colnr = Transform Each({col_name}, dur_cols, Num(Word(-1, col_name)));
show(num_colnr);我收到這種類型的錯誤:

回复:公式冒號您的數據表中是否有名為“711”的列? 我不理解該錯誤消息,因為它是法語的,我最好的猜測是它與此相同
Expecting a number or list of numbers at row 1 in access or evaluation of 'dt[ /*###*/Row(),num_colnr]', <BR />Bad Argument("1500"), dt[/*###*/Row(), num_colnr]
at line 14 in C:\Users\jarmo\Documents\Script.jsl
這可能意味著缺少名為“711”的列。
回复:列公式
是的,這是我的第一篇專欄(在所有黃色專欄中):
回复:公式冒號好吧,也許這表明這些列中的一列(或多列)丟失了,但並沒有真正說明是哪一列。 所以也許我從 duree 列中獲取那些的邏輯是不正確的
回复:列公式是的,你可能是對的,我會站在我這邊。
感謝您的寶貴幫助!
列公式大家好,
我正在尋找針對數據庫中的多個列構建公式。 這並不容易理解,我將用一個例子來解釋我的目標:

灰色部分:
這裡有 4 種不同類型的對象(ENT1、..、ENT4)。 每個對像都與一個進度號(T 列)相關聯,這些數字鏈接到明確定義的操作。
黃色部分:
這些單元格顯示每個對象將經歷哪些“數字”,並將該數字與操作相關聯。 當單元格為空時,這意味著該對象將不會進行此操作。
目標是:
- 將持續時間相加,知道該對像已取得進展(例如:ENT2 對象位於編號 1749,因此我們對它在 1500 之前所做的事情不感興趣)
- 以 ENT2 對象為例,我們必須添加持續時間 2100 和持續時間 2500,因為這些是該對象必須經歷的數字。
感謝您的幫助,
真摯地
自動化和腳本編寫