使用 If-then 對多個資料集列單元格進行操作,對資料表中的儲存格進行條件格式化專家您好,
我會盡力解釋我遇到的問題。
1. 我有 2 個資料集:一個包含不同列中 A 批的中位數,另一個包含某些參數的標準差。
中位數資料表

標準差資料表:

2.我想將risk_lot列值行值(5)與[baseline(4) + 2*std dev datatable:Lot(2)]和[baseline(4) - 2*std dev datatable:Lot(2)進行比較]。如果它落在這個範圍之間,即本例中 0<5<8,那麼我想將risk_lot 單元格著色為綠色,如果它落在視窗之外,則將其著色為紅色。
3.我嘗試使用下面的程式碼,但它給了我“無法將參數轉換為數字錯誤”,這讓我認為我的語法不知何故搞砸了。
4. 也查看了論壇中的幾個範例,但不起作用。
5.我有jmp12。
請幫忙。謝謝。
dt_summary<<SELECT where="">formula(column(3)+2*column(dt_std_subset,3)))|(column(i)Mass Customization</SELECT>
回复:使用 If-then 對多個數據集列單元格進行操作的數據表中單元格的條件格式化我能夠獲得要移動到日誌中的單元格中有顏色的數據表副本的唯一方法是首先將數據表本身放入一個窗口,然後附加臨時窗口將其中的數據錶帶到最終日誌中需要的位置。請參閱下面的示例腳本

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
:age << color cells( "red", [2, 4, 6, 8] );
temp = New Window( "temp", <<JOURNAL></JOURNAL>
回复:使用 If-then 對多個數據集列單元格進行操作的數據表中單元格的條件格式化謝謝吉姆。 現在正在工作。 但是,現在我遇到了另一個問題。 我希望這個顏色編碼的數據表與該表下方的其他圖表一起成為報告/最終期刊的一部分。 像下面這樣的東西。 當我嘗試使用數據表格框將此表格添加到報告中時,顏色編碼消失並且沒有邊框/網格線。 你能幫我寫代碼來實現以下佈局嗎?
[最終分析窗口]
[帶網格線的顏色編碼匯總表。]
(標題=第1欄)
[匯總表第1列的箱線圖][匯總表第1列的正態分位數圖]
(標題=第2欄)
[匯總表第2列箱線圖][匯總表第2列正態分位數圖]
..
.. 等等。
謝謝
回复:使用 If-then 對多個數據集列單元格進行操作的數據表中單元格的條件格式化謝謝吉姆。 我很抱歉一開始沒有把我的問題說清楚。 我想這是我在嘗試 for 循環時遇到的錯誤。 這就是為什麼我認為可能有一種特殊的方法可以使用它們的句柄指向不同的數據集列,但沒有考慮到循環結束時會發生什麼。我今天會嘗試一下,如果遇到任何問題,我會通知您。
回复:使用 If-then 對多個數據集列單元格進行操作的數據表中單元格的條件格式化我必須承認我很困惑,所以我會回到你原來的條目並重新開始。這是您的單元格著色代碼的轉換。它有3個變化。
- 我將 nCol+1 更改為 N Cols(dt_med_subset)。您的代碼將無法進行原始計算,因為當“i”的值達到 nCol+1 時,您的代碼將查找超出數據表末尾的列,並且無法找到它。
- 我添加了對 std 和 med 數據表的絕對引用
- 我將 For Each Row 更改為普通的 For() 循環。代碼會運行得更快,並且提供了更精確的參考
For( rowNum = 1, rowNum <= N Rows( dt_med_subset ), rowNum++,
For( i = 4, i < N Cols( dt_med_subset, i++,
If(
(Column( dt_med_subset, i )[rowNum] > Column( dt_med_subset, 3 )[rowNum] + 2
* Column( dt_std_subset, 3 )[rowNum]) | (Column( dt_med_subset, i )[rowNum]
< (Column( dt_med_subset, 3 )[rowNum] - 2 * Column( dt_std_subset, 3 )[rowNum]))
,
Column( dt_med_subset, i ) << color cells( "red", rowNum ),
Column( i ) << color cells( "green", rowNum )
)
)
)
);回复:使用 If-then 對多個數據集列單元格進行操作的數據表中單元格的條件格式化感謝您的代碼。 我看到您的代碼通過名稱引用了基線、批次和風險批次列。 我曾嘗試使用 nCOL,因為我擁有的原始數據集有 40 列,如 risk lot,我想避免按名稱引用它們中的每一個,因為它們具有超長的名稱。
我如何在所有這些列上使用 for 循環並使用與代碼的最後 3 行中相同的邏輯對整個 40 列單元格進行顏色編碼? 我想我要問的是如何在不使用顯式列名的情況下對整個 40 列進行顏色編碼,而是使用對這些列的句柄/引用。 請讓我知道是否有解決方法?
謝謝
回复:使用 If-then 對多個數據集列單元格進行操作的數據表中單元格的條件格式化這是我的代碼版本。我將中值和標準偏差數據分開,然後使用更新將數據重新組合在一起。
Names default to here(1);
dt_summary = New Table( "summary",
Add Rows( 4 ),
Set Header Height( 50 ),
New Column( "Analysis Columns",
Character,
"Nominal",
Set Values( {"Test-1", "Test-1", "Test-2", "Test-2"} )
),
New Column( "Statistics",
Character,
"Nominal",
Set Values( {"Median", "Std Dev", "Median", "Std Dev"} )
),
New Column( "baseline",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3, 4] )
),
New Column( "risk_lot",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4, 7, 19, 9] )
)
);
dt_summary << select where( :Statistics == "Std Dev" );
dt_std_subset = dt_summary << subset(
output table( "Std summary" ),
selected rows( 1 ),
selected columns( 0 )
);
dt_summary<<INVERT row="" selection=""></INVERT>
回复:使用 If-then 對多個數據集列單元格進行操作的數據表中單元格的條件格式化你好吉姆,
謝謝你幫我解決這個問題。 這就是匯總表的樣子。 我曾在其中一篇文章中嘗試過您之前的解決方案,但無法使其正常工作,因此我想將該表子集化為 std dev 和 median 表。 我認為通過引用 std dev 表中的列值並對其進行一些簡單的數學運算來修改中值子集表中的單元格可能會更容易,但卡住了:)
如果有更簡單的方法,請告訴我。 最終目標是只有一個中值表(匯總表的子集),其中單元格值根據 if-then 邏輯進行顏色編碼。
再次感謝。

回复:使用 If-then 對多個數據集列單元格進行操作的數據表中單元格的條件格式化- 你能展示一下 dt_summary 數據表的樣子嗎?您顯示的創建中位數和 STD 數據表的代碼似乎並不完整,因為它能夠像您顯示的那樣創建 2 個表?
- Median 和 STD 數據表的列數是否完整?
- 您是否有理由不將中位數和 STD 數據表合併到一個表中,從而使條件單元格著色成為一個更直接的過程?