JSL 腳本過濾掉特定列包含缺失值的整行親愛的社區,
我是初學者用戶,想請求您對我的以下程式碼提供協助。 「缺失」函數的論點似乎不正確。
我希望腳本顯示一個表,其中顯示包含特定範圍內的值的行。此外,用於篩選的兩個欄位中包含空白儲存格的行也將被排除。
程式碼如下:
dt = Current Data Table(); // Assumes you have a data table already opened
// Convert Column1 to numeric data type
dt << As Numeric("Temperatur");
// Convert Column2 to numeric data type
dt << As Numeric("Menge");
// Create the conditions to filter the rows
condition1 = Column(dt, "Temperatur") << Get Values() > 25;
condition2 = Column(dt, "Menge") << Get Values() > 0;
// Create a condition to remove empty cells
condition3 = Any(Is Missing(dt << Get Values("Temperatur"))) == 0 | Any(Is Missing(dt << Get Values("Menge"))) == 0;
// Apply all three conditions to filter the data table
filtered_dt = dt << Select Where(condition1 & condition2 & condition3);
// Show the filtered data table
filtered_dt << Show();
非常感謝您預先提供的任何導航。我正在使用 JMP 版本 17
麥可
自動化和腳本編寫回覆:JSL 腳本過濾掉特定列包含缺失值的整行嗨邁克爾。
JMP 中最酷的一點是:您無需了解任何腳本,只需使用 GUI 和滑鼠即可。
然後執行完步驟之後就可以去進階日誌查看程式碼了...
- 行/行選擇/選擇位置 (Ctrl + W)

- 開啟選定行的資料視圖:

- 檢查日誌:

Jmp 理解您想要什麼 - 甚至將這兩個步驟合併到一行程式碼中:

如果您想自己建立命令,您可以定義一些字串,將它們連接起來,然後解析並評估最終的程式碼:
cond1 = "Is Missing( :age )";
cond2 = ":age > 16";
Eval(Parse("dt << Select where( "|| cond1 || " | " || cond2 || " ) << Data View;"))
我的建議:花一些時間學習和理解表達式處理
很棒的教學: 使用 JSL 開發高效、強大的應用程式 (EU 2018 415),作者: @joseph_morgan
你會發現,實際上它與你的方法非常相似:
將一些條件儲存為 JSL「符號」條件 1、條件 2 ...,然後使用它們建立最終表達式並對其求值。
透過一些程式碼修復以及Expr()和Name Expr()各處(以防止 Jmp 在插入最後一行程式碼之前評估條件),程式碼應如下所示:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
condition 1 = Expr(Is Missing( :age ));
condition 2 = Expr(:age > 16 );
combined condition=Expr(or());
Insert into(combined condition, Name Expr(condition1));
Insert into(combined condition, Name Expr(condition2));
Eval(Substitute(dt << Select where( _cond_ ) << Data View),
Expr(_cond_),Name Expr(combined condition)));
回覆:JSL 腳本過濾掉特定列包含缺失值的整行您正在混合矩陣比較和資料表中的選擇,在這種情況下,您很可能只想使用 << SelectWhere 或 << Get RowsWhere 而不是 << Get Values (您可能想使用<< Get RowsWhere代替) < < 選擇位置,但這取決於您想要做什麼)。
您可以將條件直接組合到單一 SelectWhere 語句中(如果您想將它們分開,我會使用註解來完成,除非您希望重複使用完全相同的語句)
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt[[1 2 3 20 30], "height"] = .;
dt[[10 15 16 30], "weight"] = .;
// Comparison
dt << Select Where((:height > 60) & (:weight > 90));
selrows = dt << get selected rows; // to get a matrix of selected row numbers
r = dt << Get Rows Where((:height > 60) & (:weight > 90));
在這種情況下,不需要檢查那些缺失值
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt[[1 2 3 20 30], "height"] = .;
dt[[10 15 16 30], "weight"] = .;
// Comparison
r1 = dt << Get Rows Where((:height > 60) & (:weight > 90) & (!IsMissing(:height) | !Is Missing(:weight)));
r2 = dt << Get Rows Where((:height > 60) & (:weight > 90));
r1 == r2;回覆:JSL 腳本過濾掉特定列包含缺失值的整行非常感謝你,Hogi,在你的幫助下,我讓它運行起來了!
回覆:JSL 腳本過濾掉特定列包含缺失值的整行非常感謝你,Jthi,在你的幫助下,我讓它運行起來了!