<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
我正在使用 JMP10。我正在尝试创建一个脚本来删除数据表中重复的数据行。我的尝试的一个例子如下:
// 开始。
// 创建数据表。
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt << 随机选择(5);
subdt = dt << Subset(输出表名称("子集"), Invisible);
dt << 连接(subdt,附加到第一个表);
关闭(subdt,不保存);
dt << 清除选择;
// 查找并删除 bigClass 的重复行。
icol = dt << 新列( "索引", 数字, 连续, 公式( 序列( 1, N Row( dt ), 1, 1 ) ) );
repcol = dt << 新列( "重复数据",
数字,
连续的,
公式( If( :Index == Col 最小值( :Index, :name, :age, :sex, :height, :weight ), 1, 0 ) )
);
dt << 选择其中( As Column(repcol) == 0 );
dt << 删除行();
dt << 删除列( {icol, repcol} );
// 查找并删除通用数据表的重复行。
colnames = dt << 获取列名();
icol = dt << 新列( "索引", 数字, 连续, 公式( 序列( 1, N Row( dt ), 1, 1 ) ) );
repcol = dt << 新列( "重复数据",
数字,
连续的,
Formula( If( :Index == Col Maximum( :Index, /* 在此插入列名。 */ ), 1, 0 ) )
);
dt << 选择其中( As Column(repcol) == 0 );
dt << 删除行();
dt << 删除列( {icol, repcol} );
// 结尾。
我的问题是我想让这个脚本在通用数据表上运行。如何将我的 colnames 列表插入到我的公式中?有没有更聪明的方法来做到这一点?
谢谢!
使用 Col Min() 和索引列来定位重复项是很聪明的做法。
我通常使用“表”->“摘要”来获取没有重复项的数据表。 只需按将定义重复项的所有列进行分组即可。 这样做的另一个优点是提供一列(N 行)来告诉您原始表中有多少重复行。

-杰夫
我太快了。 对于需要 :Name("eg ΔX") 构造的复杂列名称,第一个发布的版本将失败。 我编辑了上面的代码,现在它应该可以更普遍地工作。
谢谢女士!非常聪明。我仍然需要研究它到底是如何工作的。
使用 Col Min() 查找重复项的好主意!
以下是基于您的想法的替代方法,该方法似乎可行。 它更简单,因为不需要任何临时公式列。
// 创建示例数据表。
打开( “$SAMPLE_DATA/大类.jmp” ) <<连接(打开( “$SAMPLE_DATA/大类.jmp” ) ,附加到第一个表) ;
// 从通用表中删除重复项
dt =当前数据表() ;
列最小值=解析( "Col Min( Row(), :Name(\!"" ||连接项目( dt <<获取列名(细绳) , “\!“), :姓名(\!”” ) || “\!”))” ) ;
重复项= [] ;
对于每一行(如果(列最小值!=排() ,重复项|/=排() ) ) ;
dt <<删除行(重复项) ;