比較 2 個資料表之間的同名列<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有 2 個資料表,其中包含同名的數字欄位。
我想運行一個腳本來比較表中的列名和行中的唯一識別碼。如果它們匹配,那麼它應該運行一個簡單的計算(兩個數字之間的%差異)並返回另一個包含結果的表。
我嘗試使用比較表,但這不允許進行我需要的計算。
有沒有人做過類似的事情我可以使用?
我附上了 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] )
);
回覆:比較 2 個資料表之間的同名列我希望這對你有用。 我從 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.
回覆:比較 2 個資料表之間的同名列我必須經常這樣做,有時必須查看約 200 列,因此首選某種自動化方法,甚至半自動化方法,此過程是首選。 如果我將兩個表連接在一起,則列名稱將不相同,這可能會使任何自動化變得更加困難。
回覆:比較 2 個資料表之間的同名列不確定您需要多久做一次這項工作。
我建議只需連接這兩個表並使用公式對這兩列的每一行進行減法計算。
假設您的資料採用固定的行順序。