將您的問題分解成更小的部分。 從一些非常簡單的東西開始,比如(我的語法可能不適用於 JMP14,因為我使用的是 JMP17)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Variability Data/2 Factors Crossed.jmp");
yname = "namechange";
col_name = "Measurement";
var_chart = Variability Chart(
Y(Transform Column(yname, Formula(colname))),
X(:Operator, :part#)
);
您已經可以使用這種類型的腳本來解決問題,但是使用類似的腳本進行測試要容易得多。
使用這樣的腳本,我很可能會求助於使用 Eval(EvalExpr()) 因為它允許我執行類似下面的操作(如果我只運行 EvalExpr() 部分,我可以看到將被評估的表達式)

如果您使用轉換只是為了重命名 Y 軸列,則可能有比使用轉換列更簡單的選項。
在你讓那部分工作之後,是時候開始處理過濾器或縮放了,但不要同時做這些。
謝謝回复。 我已經單獨驗證了代碼的所有其他組件,所以我不擔心額外的複雜性。
您發布的第一段代碼在 JMP14 中不起作用。 報錯信息為“By group的一列沒有數據,因為所有行都有缺失值或被排除。
我確實找到了一個解決方案,方法是用 Eval(EvalExpr()) 封裝可變性圖表函數調用,然後在 Expr(Name Expr(AsColumn())) 中封裝轉換內部的列名稱。
以下將適用於 JMP 14
Names Default To Here( 1 );
dt = Open(
"$SAMPLE_DATA/Variability Data/2 Factors Crossed.jmp"
);
yname = "namechange";
col_name = "Measurement";
Variability Chart(
Y( Transform Column( yname, Formula( as column(col_name)) ) ),
X( :Operator, :part# )
);
很簡單,我正在嘗試模組化一些變異性圖表。 我想要繪製這些圖表總共有 3-4 個不同的參數,因此我需要向函數傳遞一個鍵來告訴它要繪製哪一列,並讓它設定該列的一些特定處理。 即,作為繪圖操作的一部分,該列需要經歷什麼樣的轉換。
我開始的方法是傳入一個字串,然後使用一組條件來指定要轉換的列的名稱 (colname),然後指定要套用於轉換的 striong (yname)。
我已經嘗試了多種方法來做到這一點,無論我使用什麼解決方案,我都無法使繪圖正常工作。 對於給定的過濾器,對變異性圖表的 Y 進行硬編碼始終可以正確工作,因此我知道存在數據,但我似乎無法使用我的變數方法來選擇它。 到目前為止,這是我對 var 圖表 Y 線所做的嘗試:
- Y( 轉換列( yname, 公式( 列(列名) ) ) ),
- JMP 警報:無效參數(對話方塊)
- 組沒有數據,因為所有行都有缺失值或被排除(日誌視窗)
- Y( 變換列( yname, 公式( 列(dt,列名) ) ) ),
- JMP 警報:無效參數(對話方塊)
- 組沒有數據,因為所有行都有缺失值或被排除(日誌視窗)
- Y( 轉換列( yname, 公式( 列( 作為列(列名)) ) ) ),
- JMP 警報:未解析的欄位 256 次(對話方塊)
- 「無效參數 256 次,一列或一組沒有數據,因為所有行都有缺失值或被排除(日誌)
- Y( 轉換列( yname, 公式( 列( As Column(dt,colname)) ) ) ),
- JMP 警報:範圍資料表存取需要資料表列或變數 256 次(對話方塊)
- 無效參數 256 次,一列或一組沒有數據,因為所有行都有缺失值或被排除(日誌)
- Y( 轉換列( yname, 公式( 作為列(列名) ) ) ),
- JMP 警報:未解析的欄位 267 次(對話方塊)
- (沒有日誌錯誤)
- Y( 轉換列( yname, 公式( As Column(dt,colname) ) ) ),
- JMP 警報:範圍資料表存取需要資料表列或變數 267 次(對話方塊)
- (沒有日誌錯誤)
如果我的嘗試並不明顯,我仍然不清楚 As Column() 和 Column() 之間的差異是什麼。 我在論壇上看到其中一個或兩個的解決方案,所以我嘗試了所有這些,但一無所獲。 我看到的唯一線索是,當獨立使用 As Column() 時,與由 Column() 包裝的情況(256)相比,我得到了不同數量的訪問衝突(267)。 我確實知道 267 是該過濾器返回的“正確”行數,因為對轉換公式中的列名稱進行硬編碼可以正確繪製 267 行。
另外,我嘗試將colname 變數直接設定為列(colname = :R 和colname = ":R")以及直接使用這些變數和/或將它們包裝在Column() 和As Column() 的組合中的各種組合功能也沒有成功。
有人能看到我在這裡做錯了什麼嗎?
注意:這個確切的程式碼未經測試,var 名稱已經通用。
//
// Build plot functions
//
var_chart = Function( {dutname, ytype, stressname, bias, ver},
{chart, ax_min, ax_max, ax_step, len, colname, yname},
<BR /> ax_min = 0;<BR /> ax_max = 1;<BR /> ax_step = 0.1;<BR />
If(ytype == "r", (colname = "R"; yname = "R [Ω]"));<BR /> If(ytype == "l", (colname = "L"; yname = "L [H]"));<BR /> If(ytype == "c", (colname = "C"; yname = "C [F]"));
If(stressname == "s1", len = 1.1);
If(stressname == "s2", len = 2.2);
If(stressname == "s3", len = 3.3);
chart = Variability(
Y( Transform Column( yname, Formula( As Column(colname) ) ) ),
X( :X1, :X2, :X3, :X4 ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Show Box Plots( 1 ),
<<SET scale=""></SET>