我確實很快介紹了一些關於 JMP 腳本的提示和技巧JMP Scripters Club Q2 . 以下是文本形式的相同提示(還有更多)。 我的技術解釋可能不正確,而且我可能會到處使用錯誤的術語,因為我不太想理解一切(僅大多數)JMP 和 JSL 發生了什麼,我只希望我的代碼能夠快速運行。
Tip1 啟用 JMP 腳本編輯器的嵌入式日誌
啟用嵌入式日誌可讓您直接在 JMP 的腳本編輯器中快速輕鬆地查看 JMP 日誌。 您可以從腳本編輯器下的 JMP 首選項啟用嵌入式日誌。 JMP16 還允許您更改嵌入式日誌的高度(我個人使用 25%-30% 之間的值)。

也許有用的鏈接
JMP 中的文本登錄(jmp.com 幫助)
Tip2 對於 JMP16+ 啟用增強日誌
隨著 JMP16 的發布,新功能被稱為增強日誌。 這可以跟踪您在 JMP 中以交互方式完成的操作,並為這些操作提供腳本,讓 JMP 為您編寫腳本變得更加容易。
可以從 JMP 的首選項中啟用增強日誌。 您還可以對捕獲的內容和增強日誌的外觀進行修改。

也許有用的鏈接
增強的日誌和操作記錄器 - JMP 16 和 JMP Pro 16 中的新功能
JMP 16 中的增強型日誌:這改變了一切
JMP (jmp.com) 中的增強型登錄
Tip3 計算從變量到表達式的值
這是 JMP 社區中相當常見的話題:例如,為什麼變量的值沒有被評估為公式。 這基本上意味著這些值沒有被“從”表達式(變量)中評估出來。 以下是演示問題和可能解決方案的示例(我的首選方法是 Eval(EvalExpr()) + Expr())。
Example1 公式
在此示例中,將創建兩列,一列沒有 Eval(EvalExpr()),也有 Eval(EvalExpr())。 沒有的那個是公式中的變量名
查看更多...
Names Default To Here(1);
// Create demo table
dt = New Table("Demo",
Add Rows(6),
New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5, 6])),
New Column("y1", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y2", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
)
);
power = 3;
new_col = dt << New Column("x to " || char(power), Numeric, Continuous, Formula(:x^power));
Show(new_col << Get Formula);
power = 4;
Eval(EvalExpr(new_col = dt << New Column("x to " || char(power), Numeric, Continuous, Formula(:x^Expr(power)))));
Show(new_col << Get Formula);
數據表和公式(注意公式的外觀以及 x 到 3 值發生了什麼變化(它們現在是 4 的冪))

如果您要保存此數據表,重新打開它並添加新行,您會收到以下錯誤消息,因為數據表不知道冪的值是多少。

這是因為我使用的 Names Default To Here(1);在示例腳本中,但在這種情況下錯誤是一件好事。 如果我沒有使用 Names Default To Here(1);開始我的腳本(見額外小費),我會將 power 變量添加到全局命名空間,並且數據表仍將知道同一 JMP 會話中的 power 值。 現在我可能會認為我的數據表按預期工作,我去共享表,我共享它的人會想知道為什麼它不工作。
示例 2 設置規格限
此示例腳本演示瞭如何使用 Eval(EvalExpr()) 將值獲取到列屬性中(在本例中為 Spec Limits)。
查看更多...
Names Default To Here(1);
// Create demo table
dt = New Table("Demo",
Add Rows(6),
New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5, 6])),
New Column("y1", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y2", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y3", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
)
);
Column(dt, "y1") << Set Property(
"Spec Limits",
{LSL(-1), USL(1), Show Limits(1)}
);
lower_limit = 0.5;
upper_limit = 1.5;
Column(dt, "y2") << Set Property(
"Spec Limits",
{LSL(lower_limit), USL(upper_limit), Show Limits(1)}
);
Eval(
EvalExpr(
Column(dt, "y2") << Set Property(
"Spec Limits",
{LSL(Expr(lower_limit)), USL(Expr(upper_limit)), Show Limits(1)}
);
)
);
示例 3 << 關閉時
作為最後一個示例,我將演示如何保護腳本不被意外覆蓋引用。 我在短文中談到了這個2022_Q1 MakeOverChallenge:以各種方式對鼠標單擊進行操作挑戰 B
如果您運行此腳本並關閉雙變量窗口,您會注意到半導體能力表正在關閉,而不是 Big Class。 這是因為當雙變量窗口關閉時,dt 已經在引用半導體能力(也可以使用不同的變量名,例如 dt_semi)
查看更多...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density);
biv << On Close(
close(dt, no save)
);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
如果您運行此代碼,正確的表將被關閉。 這是因為我們正在評估 Big Class 表對 << On close 語句的引用
查看更多...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density);
Eval(EvalExpr(
biv << On Close(
Close(Expr(biv << Get Data Table), no save)
);
));
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
也許有用的鏈接
使用 Eval Insert、Eval Expr、Parse 和 Substitute 將一個表達式插入另一個表達式
表達式處理函數:第一部分 - 解開 Expr()、NameExpr()、Eval()、... 難題
表達式(JMP 幫助、jmp.com)
表達式函數(JMP 幫助,jmp.com)
額外提示 使用默認為此處的名稱啟動您的腳本(1);
這將保護您免受全局變量污染命名空間並避免出現問題。這是我在啟動新腳本文件時總是做的事情,即使我要使用自定義命名空間。 我這樣做是為了避免在全局命名空間中意外創建變量。
也許有用的鏈接
高級範圍和命名空間(JMP 幫助,jmp.com) (很好讀,它有多個頁面,請務必檢查大部分!)
解析名稱的規則(JMP 幫助、jmp.com)
提高效率和可重複性的基本腳本:少做多做 (2019-US-TUT-290)
關於
Names default to here (1);
我也看到有人用
Clear globals (1);
另外在腳本的開頭。
我覺得我能理解為什麼這會有用,但您對此有何看法?
@Ressel ,我個人會避免使用 Clear Globals(1),因為它可能會干擾可能正在運行的其他腳本。 將任何腳本變量的範圍限定在本地或它們自己的命名空間中會更安全。
你好@Ressel ,
我同意@DonMcCormack ,最好不要清除全局變量。 您不想這樣做的一個示例可能是當您的腳本中有“召回”功能時,您可以單擊“召回”按鈕,然後單擊您已轉換為角色或值的任何變量或列已輸入用於 JMP 平台的內容會自動替換,您無需返回手動執行此操作。 如果您在腳本開始時有 clear globals(1),則每次運行腳本時,您的召回變量都會從內存中清除,從而有效地使召回功能無用。
DS