单元格与条件输出的比较你好,
我正在尝试创建一个数数基于条件的发生次数,使用下表作为示例。 计数为 1 的条件是“参数”列和“位置”列在下一行或 2 列中的任何其他位置同时重复。 输出表将具有与原始表中相同的列数据,并添加了 3 列“Count”、“Tool 1”、“Tool 2”(工具数量可以增加到 5)。

该表的输出如下。 由于第 3 行和第 4 行根据 2 列条件(参数和位置)重复,这将是 1 的计数,因此它再次以相同的条件重复,这将是第二次计数,总共 2。 要显示的行将取决于按日期顺序排列的 3 行中的第一行。 最后,工具列也将按日期顺序填充(即工具 1(或 E)首先在下午 1:10 出现,然后工具 2(或 F)在下午 2:10 出现)等。

数据表回复:单元格与条件输出的比较这是一个脚本,可以为您的数据转换提供良好的开端
Names Default To Here( 1 );
// Create a sample table
dt = New Table( "Sample",
Add Rows( 6 ),
Set Header Height( 46 ),
New Column( "Date/Time",
Numeric,
"Continuous",
Format( "y/m/d h:m", 19 ),
Input Format( "y/m/d h:m" ),
Set Values( [3273127800, 3273124200, 3273142200, 3273138600, 3273152400, 3273149400] )
),
New Column( "Parameter", Character, "Nominal", Set Values( {"A.1", "A.2", "A.3", "A.3", "A.2", "A.3"} ) ),
New Column( "Location", Character, "Nominal", Set Values( {"B.1", "B.2", "B.3", "B.3", "B.1", "B.3"} ) ),
New Column( "Process", Character, "Nominal", Set Values( {"C.1", "C.2", "C.3", "C.3", "C.1", "C.3"} ) ),
New Column( "Tool", Character, "Nominal", Set Values( {"E.", "E", "F", "E", "E", "G"} ), Set Display Width( 43 ) ),
New Column( "Part", Character, "Nominal", Set Values( {"F-1.1", "F-1.2", "F-1.1", "F-1.1", "F-1.1", "F-1.1"} ) )
);
// The calculation script starts here
// Calculate the Counts
dtSum = dt << Summary(
Group( :Parameter, :Location ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "Summary" )
);
// Delete rows that have no matches
dtSum << select where( dtSum:N Rows == 1 );
If( N Items( dtSum << get selected rows ) > 0,
dtSum << delete Rows
);
// The count is equal to how many rows, not how many matches so subtract 1 to count the matches
For Each Row(
dtSum:N Rows = dtSum:N Rows - 1;
);
dtSum:N Rows << set name("Count");
// Create a new table from original that contains only the data with matches
dtJoin = dt << Join(
With( dtSum ),
Merge Same Name Columns,
Match Flag( 0 ),
By Matching Columns( :Parameter = :Parameter, :Location = :Location ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 ),
Output Table( "Joined" )
);
// Sort the data to set tool usage order
dtJoin << Sort( By( :Parameter, :Location, :"Date/Time"n), Replace Table(1));
// Create a new column for tool order
dtJoin << New Column("Tool Col", character, set each value(
"Tool " || Char( Col Cumulative Sum(1, :Parameter, :Location))
));
// Split the data to the final output for
dtFinal = dtJoin << Split(
Split By( :Tool Col ),
Split( :Tool ),
Group( :Parameter, :Location ),
Output Table( "Final" ),
Sort by Column Property
);
// Clean up
close( dtSum, nosave );
close( dtJoin, nosave );
有关各种平台和功能的文档记录在脚本索引和脚本指南中。两者都在帮助下拉菜单下可用。
回复:单元格与条件输出的比较你好,
我*认为*我明白你在找什么,但正如吉姆所说,更多的上下文更好。 对于您提供的数据,以下内容会生成您描述的输出,但是由于只有 1 行输出可以继续……这只是一个猜测。 我假设,根据您提供的输入和输出,除了参数和位置之外,过程和部分还用作分组变量(?),并且在数据摘要中 Count 总是比 n Rows 少 1 . 如果不是这种情况,这些很容易在下面的代码中更改,但同样......只是一个猜测。
无论如何,试试这个看看它是否是你需要的,如果不是,希望你是一个远离你想要的东西的快速代码模型。
干杯,
布雷迪
Names Default To Here( 1 );
dt = New Table( "Sample",
Add Rows( 6 ),
Set Header Height( 46 ),
New Column( "Date/Time",
Numeric,
"Continuous",
Format( "y/m/d h:m", 19 ),
Input Format( "y/m/d h:m" ),
Set Values( [3273127800, 3273124200, 3273142200, 3273138600, 3273152400, 3273149400] )
),
New Column( "Parameter", Character, "Nominal", Set Values( {"A.1", "A.2", "A.3", "A.3", "A.2", "A.3"} ) ),
New Column( "Location", Character, "Nominal", Set Values( {"B.1", "B.2", "B.3", "B.3", "B.1", "B.3"} ) ),
New Column( "Process", Character, "Nominal", Set Values( {"C.1", "C.2", "C.3", "C.3", "C.1", "C.3"} ) ),
New Column( "Tool", Character, "Nominal", Set Values( {"E.", "E", "F", "E", "E", "G"} ), Set Display Width( 43 ) ),
New Column( "Part", Character, "Nominal", Set Values( {"F-1.1", "F-1.2", "F-1.1", "F-1.1", "F-1.1", "F-1.1"} ) )
);
/////////////////BEGIN PROCESSING
//create a summary table
dtSum = dt << summary( group(:parameter, :location, :"Date/Time"n, :process, :tool, :part), Link to original data table( 0 ) );
//create a column for easy group navigation
dtSum << new column ("plpp", character, formula(:parameter || :location || :process || :part));
//process table, from bottom up
for each ( { r }, nrow(dtSum) :: 2,
if ( dtSum:plpp[r] == dtSum:plpp[r-1],
dtSum:tool[r-1] ||= evalinsert(", ^dtSum:tool[ r ]");
dtSum:n Rows[r - 1] += dtSum:n Rows[ r ];
dtSum << delete rows ( r );
);
);
// delete rows with no duplicates
dtSum << deleteRows (dtSum << get rows where (:n Rows == 1) )
<< Move Selected Columns( {:"Date/Time"n}, To First )
<< Move Selected Columns( {:Tool}, To Last );
// rename nRows to count, after subtracting 1
dtSum:Nrows[1::nrow(dtSum)]--;
dtSum:NRows << set name ("Count");
// split out tool column
dtSum << Text to Columns( columns( :Tool ), Delimiters( "," ) );
dtSum << delete columns ({"Tool", "plpp"});
回复:单元格与条件输出的比较你好,
是的,我发送的最新屏幕截图是您脚本的输出,即您标记为“最终”表的内容。 请原谅我没有与数据共享有问题的特定表,因为我必须更新信息以反映非 ip 参数。 我会尽力做更好的解释。 正如我在最初的问题中提到的,下表是一个示例

输出应如下表所示

我想创建一个概括次数(重复)或计数的表格,“工具”在“日期/时间”(不一定是特定时间)的同一天内击中“位置”。 因此,如果一行根据位置、参数和过程重复,则应将其计为 1 次重复。 如果第二行在相同或不同的工具上,只要它满足针对 1 次重复计数提到的 3 标准就没有关系。 然后,输出表示例显示“工具 1”、“工具 2”等……这将记录哪些工具参与了这些重复的重复事件。 因此,如果它转到工具“E”,则(位置、参数、过程)表示同一天发生了另一个事件并且它在工具“F”上,然后将在右侧添加一列以反映第一个事件发生在 E 上,第二个在 F 上,依此类推。 最终,我想根据该摘要在 jmp 中创建一组图,在其中我可以按工具、参数、位置等显示这些重复事件的计数... 除了在这些重复事件中涉及哪些工具。 我希望这能更多地解释我的想法。 感谢您抽出宝贵的时间,我很感激。
回复:单元格与条件输出的比较Brady 和我的代码版本都适用于您提供的简单表格。 我同意他的观点,如果他的代码不起作用,请提供一个填充更多的表,我们可以对其进行测试。
回复:单元格与条件输出的比较你好,
首先,对于拖延了很长时间,我深表歉意,我被拉向了多个方向。 接下来,感谢您提供的脚本它几乎是完美的,并且输出了“最终”表格。 我发现计数列做了它应该做的事情,但是,“工具”没有锚定数据。 对于每个工具的含义我应该有一个总的“计数”点击/计数,所以“计数”的一列和它旁边的工具的相应列应该有点击次数这也由其他列分组,如参数,位置等... 我得到的结果如下图所示,其中工具除了分散在与计数相关的行中之外,还被分成不同的列。 而新创建的“工具”列重复相同的ID

回复:单元格与条件输出的比较上面的输出示例是输出应该是什么样子的示例,还是输出当前不正确的示例?
能不能附上你正在使用的JMP数据表,这样有一些真实数据的例子可以用来测试?另外,如果上面不是数据应该是什么样子的例子,你能提供一个简单的例子吗?我对你真正想要的东西感到困惑。
回复:单元格与条件输出的比较谢谢你成功了!
回复:单元格与条件输出的比较谢谢,这也可以通过一些分组操作来实现。