我考慮這個問題有一段時間了,在我短暫的假期裡,我決定採用一種腳本化的方法來做到這一點。
但是,我們正在對此進行研究,以使其更容易實現。

這是我的腳本:
/***************************************************
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 的子集菜單 
我們可以問@朱利安如果他也想將其添加到動態子集加載項中:)
關於我在這裡的帖子,我實際上想到了一些更小的東西——只是在數據表左下角的菜單中添加一個用於非排除行的選項。
老實說,我已經習慣於選擇被排除的行,然後反轉選擇——我會說這樣的功能對我來說來得太晚了。
但正如我的許多帖子一樣 - 這些願望主要不是為了我自己,而是為了我的同事......以及社區中的所有其他用戶 

隨著快速選擇工具列的引入,事情變得更容易了:

點擊次數減少了
- 選擇排除的行(點選 2 次)
- 反轉選擇(行 - 行選擇 - 反轉行選擇 = 3 次點擊)
- 選取行的資料視圖(點選 2 次)
➜ 7次點擊
到
- 選擇排除的行(點選 2 次)
- 反轉(1次點擊)
- 使用新的快速選擇工具列查看選定行的資料(按一下 2 次) :按一下 1 次
➜ 5 4次點擊
外表:
將非排除新增至左下角的選單中,將會點選 2 次

很酷的新功能
☑ 可以幫助很多使用者!
刪除一個“bug”
很高興擁有
無人需要它
表左下方的行總表對於取得選取行、排除行等的 DataView(子集)非常有用。
資料視圖
不幸的是,在我的日常工作中,我更常需要非排除行的子集而不是排除行的子集。
所以,我去:
1) 
2) 
3)

我的願望:非排除行的附加條目,
像這樣

由此:有機會為非排除行產生 DataView。
額外好處:
人們可以直接看到實際使用的(=非排除的)行數,而不必計算它(所有行 - 排除)
更多願望提交者