你好,
我有一個非常大的數據表(大約 600 萬行)。 它特別具有作為列的日期列、產品參考列和結果列(具有兩個可能的值:OK 或 NOK)。 每行對應一個組件測試。
我希望能夠讓用戶選擇一個時期或日期。 從這個時期開始,我希望能夠找到並提取與所選時期內進行的測試數量相比具有最多結果 == NOK 的 5 個產品參考。
我不知道如何以最佳方式編寫腳本。
如果您對我有任何想法,請提前致謝
你好,有很多方法可以做到這一點。 一種特別好的方法是使用帶有查詢後腳本的 JMP Query Builder,它會在繼續分析之前提示用戶輸入開始和結束日期。 我強烈建議您了解 JMP 查詢生成器以進行此類工作。 不幸的是,在這裡打字有點太多了。
我將給出一個仍然有效的簡單替代方案。
首先,我總是建議以數字方式存儲 1/0 數據,如 1 和 0,使用值標籤來顯示諸如“OK”和“NOK”之類的內容。 在您的情況下,我們可以使用 1 => "OK" 和 0 -> "NOK"。 (見附件數據表。)
我建議這樣做,因為按組匯總平均值可以立即提供每個組中“OK”的比例。 如果 1 和 0 已顛倒,則平均值給出“NOK”的比例。
因此,在做出這一更改後,我們又做了一件事:我們添加了表變量。 右鍵單擊表名稱附近的紅色三角形,然後選擇新建表變量。 這將顯示一個對話框,您可以在其中命名新表變量並為其指定初始值。

為“開始”和“結束”執行此操作允許我們定義兩個值(在這種情況下是字符串,但數字也可以),它們可以像公式和腳本中的列一樣使用。 要稍後更改值,只需雙擊它即可進行編輯。
使用相同的紅色小三角菜單,我們可以向數據表添加一個新腳本。 我添加了一個名為“Worst 5”的腳本並粘貼了下面的腳本文本。
Names Default To Here(1);
dt = Current Data Table();
//change table variable strings to times. the format used for the string must be one that JMP recognizes.
beg = informat(dt:Begin);
end = informat(dt:End);
//subset the table to get only those rows in the time interval of interest
dtSub = dt << subset(selected Columns (0), rows(dt << get rows where (beg < :date < end)));
//summarize this new table to find averages of the OK column, grouping by product. This will be the proportion of "good"
dtSubSum = dtSub << summary(group(:product), mean(:OK));
//sort this new table, ascending
dtSubSum << sort(replace table, by(:"Mean(OK)"n), order(ascending));
//the first 5 rows now have the lowest proportion of "good", hence highest proportion of "bad"
dtSubSum << subset(selected Columns(0), rows(1::5));
//close the first subset table, and the summary table linked to it.
close(dtSub, nosave);

現在很容易得到你想要的報告:
1) 根據需要更改開始和結束值。
2) 按“最差 5”腳本上的綠色按鈕以獲取結果。
同樣,有更靈活的方法可以做到這一點,但它們需要了解 JMP 查詢生成器或交互式窗口(顯示樹)腳本。 我強烈建議學習這兩個,但與此同時,表變量和基本表操作可以做很多事情。
另一種選擇,不涉及腳本:
1) 使用製表平台計算均值,同時使用本地數據過濾器來限制考慮的日期範圍。
2) 右鍵單擊完成的 Tabulate 報告表,選擇 Make into Data Table,然後對結果數據表進行排序,使 5 個“最差”行(即 5 個最低的 OK 平均值)位於表的頂部。
3) 如果需要,選擇這 5 行和子集。
希望這些想法之一可以幫助您入門。
乾杯,
布雷迪