比较两个数据表之间的同名列<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有 2 个包含同名数字列的数据表。
我想运行一个脚本来比较表中的列名和一行中的唯一标识符。如果它们匹配,那么它应该运行一个简单的计算(两个数字之间的百分比差异)并返回另一个包含结果的表格。
我曾尝试使用比较表,但这不允许进行我需要的计算。
有没有人做过我可以使用的类似的东西?
我附上了 2 个示例文件,以防万一有人觉得他们可以帮助我。
大卫
回复:比较两个数据表之间的同名列有很多方法可以使用 jsl 自动执行此过程。 这是一种适用于此处发布的两个表的尝试。 表的名称和 ID 列在这里是硬编码的,但是可以很容易地实现一个让用户选择表的对话框。 该代码适用于任何数量或命名的物质列(但是物质列的数量和这些列的顺序在两个表中必须相同)。
// Define table variables, dt1, the table with least number of rows used as reference
dt1 = Data Table( "List Report -1.jmp" );
dt2 = Data Table( "List Report -2 rows.jmp" );
// Define id columns
idcol1 = Column( dt1, 1 );
idcol2 = Column( dt2, 1 );
//Get matching rows
m = J( N Row( dt1 ), 2, . );
For( i = 1, i <= N Row( dt1 ), i++,
mi = dt2 << get rows where( idcol2[] == idcol1[i] );
If( N Row( mi ) > 0,
m[i, 2] = mi[1]
);
m[i, 1] = i;
);
//Make matrix with differences for between matching rows for each substance (edit this formula to get e.g. %)
diff = (dt1 << get asmatrix)[m[0, 1], 0] - (dt2 << get asmatrix)[m[0, 2], 0];
// Put matrix into a new table
dt_diff = New Table( "Difference of matched", New Column( "Matched Substance Identifier", character, values( idcol1[m[0, 1]] ) ) );
dt_diff << set matrix( diff );
//Set column names
colnames = dt1 << get column names( string );
For( i = 2, i <= N Items( colnames ), i++,
Column( dt_diff, i ) << set name( colnames[i] )
);
回复:比较两个数据表之间的同名列我希望这对你有用。 我从 jmp8 脚本指南中得到了 if ...
比较两个数据表
这是一个脚本,用于打开两个数据表,比较它们,并将所有结果报告到日志窗口。 这
脚本大量使用 For 运算符对所有行进行循环操作(使用 i 循环),嵌套
使用另一个 For 运算符对所有列进行循环操作(使用 j 循环)。
/* COMPARE THE CONTENTS OF TWO DATA TABLES */
// First identify the two data tables to be compared.
// Since you don't specify arguments, Open() presents the
// host-system dialog box for opening a file.
caption("Please locate the first data table.",spoken(1));
dt1=open();
caption("Please locate the second data table.");
dt2=open();
// Check for differing sizes.
if(nrow(dt1)!=nrow(dt2),
write("Differing number of rows. "),
write("Same number of rows. "));
if(ncol(dt1)!=ncol(dt2),write("Differing number of columns. "),
write("Same number of columns. "));
nr = min(nrow(dt1),nrow(dt2));
nc = min(ncol(dt1),ncol(dt2));
// Check for differing column names.
for(j=1,j<=nc,j++,
current data table(dt1);n1=char(ColumnName(j));
current data table(dt2);n2=char(ColumnName(j));
if(n1!=n2,
write("\!rDiffering column names in column "||char(j));
show(n1,n2)));
// check for differing values
e=0;
for(i=1,i<=nr,i++,
for(j=1,j<=nc,j++,
v1 = Column(dt1,j);
v2 = Column(dt2,j);
if(v1!=v2,
write("\!rDiffering values at row "||char(i)||
" in column "||char(j));show(v1,v2);e++)));
if(e==0,
write("Matching cells have the same values."),
write("\!rNumber of cells that exist in both tables ");
write("and have differing values: "||char(e)));
// check for differing row states
for(i=1,i<=nr,i++,
current data table(dt1);r1 = char(rowstate(i));
current data table(dt2);r2 = char(rowstate(i));
if(r1!=r2,
write("\!r\!rDiffering row states at row "||char(i));
show(r1,r2)));
//Observe how Current Data Table is used to switch between two open windows.
回复:比较两个数据表之间的同名列我必须经常这样做,有时我必须查看大约 200 列,因此可以通过某种方式实现自动化,甚至是半自动化,此过程是首选。 如果我将两个表连接在一起,那么列名将不相同,这可能会使任何自动化变得更加困难。
回复:比较两个数据表之间的同名列不确定您必须多久做一次这项工作。
我建议只加入这两个表并使用公式对这两列的每一行进行减法计算。
假设您的数据按固定的行顺序排列。