使用 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 数据表合并到一个表中,从而使条件单元格着色成为一个更直接的过程?