寻找模式<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,
我想生成一个总结表,给出另一个变量的每个类别的变量模式。
理想情况下,这会起作用:
dt = open ("$SAMPLE_DATA/Mail Messages.jmp");
dt << 摘要 ( 组 ( :From ), Mode (:To) );
或者,我将按“From”堆叠表格并计算每行的众数。然而,“模式”不是表摘要或列公式中的选项。
欢迎任何计算众数的想法,包括发送给 SAS。
我正在使用 JMP 10。
谢谢你,
罗恩
回复:寻找模式你好-模式是最常见的项目,所以你要找的是收到每个发件人最多信件的人(或者,如果出现平局,则可能是其他人),对吗?如果是的话,我认为下面的代码应该可以实现,尽管我确信肯定有更优雅和/或更短的方法。我特意省略了所有中间计算,并命名所有表以留下审计线索:
dt1= 打开 (“$SAMPLE_DATA/邮件消息.jmp”);
dt1<<设置名称(“dt1”);
dt2=dt1<<摘要(组(:从), N,子组(:到) );
dt2<<设置名称(“dt2”);
发件人=( dt2<<获取列名);
展示(发件人);
// 丢弃此列表的前两个元素;
移除(发件人, {1, 2});
展示(发件人);
// 将它们堆叠起来;
dt3=dt2<<堆栈(列(评估(发送方, 源标签列(“标签” ), 堆积数据列(“数据” ));
dt3<<设置名称(“dt3”);
// dt3 现在包含每个人发送给每个收件人的信件数量;
dt4=dt3<<摘要(组(:从), 最大限度( :数据) );
dt4<<设置名称(“dt4”);
// dt4 现在包含每个人发送给任何一个收件人的最大信件数量;
dt5=dt4<<连接(与( dt3 ),
选择( :来自, :标签, :数据) ,
通过匹配列(:从= :从, :姓名(“最大(数据)” ) = :数据),
删除多个(0, 0 ),
名称( "包含不匹配项" )( 0 , 0 ) ,
保留主表顺序(1 )
);
dt5<<设置名称(“dt5”);
柱子(dt5, “标签”) <<设置名称(“接受者”);
/*
dt5 现在应该包含每个人发送给任何收件人的最大信件数量
以及该收件人的姓名(如果出现平局,则为收件人的姓名)
*/
这样一来,你得到的应该是安给迈克尔发了 4 封信,杰夫给迈克尔发了 7 封信,约翰给迈克尔发了 12 封信,凯瑟琳给约翰发了 12 封信,以此类推。你想试试这个方法,看看它是否能满足你的要求吗?要获取任意收件人收到的来自任意发件人的最大信件数量,只需交换“收件人”和“发件人”列即可。
回复:寻找模式谢谢你,Dodo,
它运行良好。
回复:寻找模式大家好,Dodo,
Dodo 的解决方案在技术上是正确的,但在处理大数据时却没有用。
经过思考,我有一个可扩展的替代解决方案。
dt1 = 打开( "$SAMPLE_DATA/邮件消息.jmp" ) ;
dt1 << 设置名称(“dt1”);
// 根据发送者生成接收者的分布
dt1 << 新脚本 ( "分布", 分布 ( 名义分布 ( 列 ( :到 ) ), 按 ( :从 ) ) ) );
Dist = Dt1 << 运行脚本( "分布" ) ;
// 将频率表提取为一个数据表。
dt2 = 报告(dist[1])["频率"][表格框(1)] << 制作组合数据表;
dt2 << 设置名称( "dt2" ) ;
距离<<关闭窗口;
// 从数据表中删除“总计”行 - 它们不代表相关的频率
选择 = dt2 << 选择其中(:Level == "Total" );
选择<<删除行;
// 总结以获得每个“来自”的模式“到”
dt3 = 数据表( "dt2" ) << 摘要( 组( :来自 ), 最大值( :计数 ), 统计列名格式( "列" ), 链接到原始数据表( 0 ) );
dt3 << 设置名称(“模式”);
// 更新汇总表以获取“To”的值
dt3 << 更新(使用(数据表( "dt2" )),匹配列(:From = :From,:Count = :Count),从更新表中添加列(:Level ));
dt2 << 关闭窗口;
列(dt3,“级别”)<<设置名称(“模式”);
回复:寻找模式在 JMP 中,执行一项任务的方法通常有多种。我突然想起前段时间写过一个函数,它能非常高效地找出按一列或多列分组的最常见项。我在这里分享它,作为上述方法的替代方案。结果与 Dodo 的类似,即返回所有“绑定”众数,而不是像 Ron 使用 update() 方法那样只返回最后一个众数。
mode_by_groups = 功能 ( { collist } , // 列名列表
// 查找 collist 中最后一列的众数
总结( g = by ( 评估 ( collist ) ) , n = 数数 () ) ;
X =设计( g [ 1 ] ) :* n ;
i = 地方 ( 最大速度 (转置( X ==重复( 最大速度 ( X , N 行( n ) ) ) ) ) ) ;
//向新表添加分组列
dt1 =新表( “模式” ) ;
对于( k = 1 , k <= N个项目( collist ) -1 , k ++,
dt1 << (新列( 字符 ( collist [ k ]) ,字符,设置值( g [ k ][ i ] ) )) ;
);
//添加模式和N
dt1 << 新专栏( “模式” || 字符(collist[k]), Character, set values( g[k][i] ) );
dt1 << 新专栏( “N”, set values( n[i] ) );
);
//示例
打开( “$SAMPLE_DATA/邮件消息.jmp” ) ;
mode_by_groups ( {从,到} ) ;
打开( "$SAMPLE_DATA/Consumer Preferences.jmp" );
mode_by_groups ( {性别,单身状态,出生年份} ) ;