我考虑这个问题有一段时间了,在我短暂的假期里,我决定采用一种脚本化的方法来做到这一点。
但是,我们正在对此进行研究,以使其更容易实现。

这是我的脚本:
/***************************************************
SCRIPT NAME: Row Selector Viewer
AUTHOR(s):
Sam Gardner, JMP Statistical Discovery LLC
JMP VERSION:
Built with JMP 17.0 and tested with JMP 16.2
PURPOSE:
To allow the user to be able to easily subset and see rows that are selected or excluded or hidden, OR unselected or unexcluded or unhidden
SPECIFICATION:
Views of the desired subset of the current data table are created using linked subsets and data box views within a report window. Upon selecting an option, an invisible linked
subset of the desired rows to view is created, and then a new data view in a data box is displayed in the scripted report window.
USAGE:
Must be run with a data table open.
Upon running, choose the subset of the rows to view by selecting the check boxes. Note that this current version
only allows subsetting based in Selected/Excluded/Hidden or Unselected/Unexcluded/Unhidden
ASSUMPTIONS: None.
SCRIPT REVISION HISTORY:
VERSION DATE DESCRIPTION
1.0 2022 Dec 14 First Version
NOTES:
N/A
TO DO:
N/A
FUTURE IMPROVEMENT IDEAS:
None at this time.
***************************************************/
Names Default To Here( 1 );
dt = Current Data Table();
// function definitions
/*
// Loc Inverse Function
// This function converts a vector of positive integers (locvals) into an
// indicator vector of a specified length, n, with the values
// v[I] = 1 if I is in locvals, and 0 otherwise
// example
// Loc Inverse(6, [1,3])
// returns
// [1, 0, 1, 0, 0, 0]
*/
Loc Inverse = Function( {n, locvals},
v = J( n, 1, 0 );
v[locvals] = 1;
v;
);
Loc Inverse( 6, [1, 3] );
/*
// this gets the indicators of selected rows in the data table
LocInverse( N Rows( dt ), dt << Get Selected Rows );
// this gets the indicators of the excluded rows in the data table
Loc Inverse( N Rows( dt ), dt << GetExcludedRows );
// this gets the indicators of the hidden rows in the data table
Loc Inverse( N Rows( dt ), dt << GetHiddenRows );
*/
nw = New Window( "Row Selector Viewer",
<<ON close=""> 0,
For( i = 1, i <= N Items( viewchoice ), i++,
RowstoView = RowstoView | Match( viewchoice[i],
"Selected",
cbright << Set All( 0, run script( 0 ) );
Loc Inverse( N Rows( dt ), dt << Get Selected Rows );,
"Excluded",
cbright << Set All( 0, run script( 0 ) );
Loc Inverse( N Rows( dt ), dt << Get Excluded Rows );,
"Hidden",
cbright << Set All( 0, run script( 0 ) );
Loc Inverse( N Rows( dt ), dt << Get Hidden Rows );
)
);
RowstoView = Loc( RowstoView );
Print( RowstoView );
,
RowstoView = 1 :: N Rows( dt );
Print( RowstoView );
);
If( !Is Empty( dt_sub ),
Close( dt_sub, nosave );
Clear Symbols( dt_sub );
);
selectedrows = dt << get selected rows;
dt << clear select;
dt << select rows( RowstoView );
dt_sub = dt << Subset( Output Table( "Data View" ), Selected Rows( 1 ), Selected Columns Only( 0 ), Linked, Private );
dt << clear select;
dt << select rows( selectedrows );
pbright << Append( dt_sub << new data box() );
),
cbright = Check Box(
{"Unselected", "Unexcluded", "Unhidden"},
viewchoice = cbright << get selected;
RowstoView = J( N Rows( dt ), 1, 1 );
If( N Items( viewchoice ) > 0,
For( i = 1, i <= N Items( viewchoice ), i++,
RowstoView = RowstoView & Match( viewchoice[i],
"Unselected",
cbleft << Set All( 0, run script( 0 ) );
!(Loc Inverse( N Rows( dt ), dt << Get Selected Rows ));,
"Unexcluded",
cbleft << Set All( 0, run script( 0 ) );
!(Loc Inverse( N Rows( dt ), dt << Get Excluded Rows ));,
"Unhidden",
cbleft << Set All( 0, run script( 0 ) );
!(Loc Inverse( N Rows( dt ), dt << Get Hidden Rows ));
)
);
RowstoView = Loc( RowstoView );
Print( RowstoView );
,
RowstoView = 1 :: N Rows( dt );
Print( RowstoView );
);
If( !Is Empty( dt_sub ),
Close( dt_sub, nosave );
Clear Symbols( dt_sub );
);
selectedrows = dt << get selected rows;
dt << clear select;
dt << select rows( RowstoView );
dt_sub = dt << Subset( Output Table( "Data View" ), Selected Rows( 1 ), Selected Columns Only( 0 ), Linked, Private );
dt << clear select;
dt << select rows( selectedrows );
pbright << Append( dt_sub << new data box() );
)
)
),
Button Box( "Close Viewer", nw << close window )
),
pbright = Panel Box( "Data View", )
)
);
dt_sub = dt << Subset( All Rows, Selected Columns Only, Linked, Private );
pbright << Append( dt_sub << new data box() );
</ON>
我在发件箱中找到了这个 - 不知道我是否将其张贴在其他地方?
在相同的上下文中 - 请也允许用户发送
dt << Get nonExcluded Rows();
到数据表:
https://community.jmp.com/t5/Discussions/col-lt-lt-get-values-for-non-excluded-rows/mp/556579/highlight/true#M77051
这段重要代码的 fastes 单行命令是慢 10 倍:
allRows = dt << get rows where( Excluded() == 0 );
并且首先询问未排除的行,然后“反转”列表会增加约 30% 的时间预算
@萨姆加德纳.
谢谢你的代码——非常好的菜单。
绝对应该转到 Jmp 18 的子集菜单 
我们可以问@朱利安如果他也想将其添加到动态子集加载项中:)
关于我在这里的帖子,我实际上想到了一些更小的东西——只是在数据表左下角的菜单中添加一个用于非排除行的选项。
老实说,我已经习惯于选择被排除的行,然后反转选择——我会说这样的功能对我来说来得太晚了。
但正如我的许多帖子一样 - 这些愿望主要不是为了我自己,而是为了我的同事......以及社区中的所有其他用户 

随着QuickSelect Toolbar的引入,它变得更容易一些:

点击次数从
- 选择排除的行(点击两次)
- 反向选择(行 - 行选择 - 反向行选择 = 3 次点击)
- 选定行的数据视图(单击两次)
➜ 7 次点击
到
- 选择排除的行(点击两次)
- 反转(单击一次)
- 使用新的快速选择工具栏查看选定行的数据(单击 2 次) :单击 1 次
➜ 5 4 次点击
外表:
将非排除项添加到左下角的菜单中,只需点击 2 次即可:)

很酷的新功能
☑ 可以帮助很多用户!
删除一个“bug”
很高兴拥有
无人需要它
表左下方的行汇总表对于获取选定行、排除行等的 DataView(子集)非常有用。
数据视图
不幸的是,在我的日常工作中,我更经常需要非排除行的子集而不是排除行的子集。
所以,我去:
1) 
2) 
3)

我的愿望:非排除行的附加条目,
像这样

由此:有机会为非排除行生成 DataView。
额外好处:
人们可以直接看到实际使用的(=非排除的)行数,而不必计算它(所有行 - 排除)
更多愿望提交者