關於Table Merge的問題,如何使用JSL將多列數據合併為一列?
如果我有一個表,某些列名非常相似,例如一個列名是寫 689700 @WFI*HH C 56XY Z,另一個列名是 689799 @WFI*HH 56XY W,一列的單元格內容顯示實際值,另一列的同一行顯示“NA”,問題是如何合併新列中的單元格內容並刪除“NA”,如下圖所示。由於表格中有>20列,需要使用JSL對相似的列進行判斷和分組,然後將單元格內容合併到一個新的列中。
謝謝
| | | 原始表 | | | | 合併表後 |
| ID_1 | ID_2 | WR@689700@WFI*HHC 56XYZ | WR@689799@WFI*HH 56XYZ W | WR@780990@UW*FFY 78XYZ | WR@780666@UW*FFY 78XYZ | --> | ID_1 | ID_2 | WR@689700@WFI*HHC 56XYZ | WR@689799@WFI*HH 56XYZ W | WR@780990@UW*FFY 78XYZ | WR@780666@UW*FFY 78XYZ | 寫@1 | 寫@2 |
| 22164 | 115 | 72_22P | 不適用 | SS_YY | 不適用 | 22164 | 115 | 72_22P | 不適用 | SS_YY | 不適用 | 72_22P | SS_YY |
| 25335 | 33 | 72_22P | 不適用 | 不適用 | 88_CC | 25335 | 33 | 72_22P | 不適用 | 不適用 | 88_CC | 72_22P | 88_CC |
| 24870 | 872 | 72_22P | 不適用 | SS_YY | 不適用 | 24870 | 872 | 72_22P | 不適用 | SS_YY | 不適用 | 72_22P | SS_YY |
| 24861 | 591 | 不適用 | 72_88P | SS_YY | 不適用 | 24861 | 591 | 不適用 | 72_88P | SS_YY | 不適用 | 72_88P | SS_YY |
| 12928 | 274 | 72_22P | 不適用 | SS_YY | 不適用 | 12928 | 274 | 72_22P | 不適用 | SS_YY | 不適用 | 72_22P | SS_YY |
| 20927 | 818 | 不適用 | 72_88P | SS_YY | 不適用 | 20927 | 818 | 不適用 | 72_88P | SS_YY | 不適用 | 72_88P | SS_YY |
| 22167 | 14 | 72_22P | 不適用 | SS_YY | 不適用 | 22167 | 14 | 72_22P | 不適用 | SS_YY | 不適用 | 72_22P | SS_YY |
| 12930 | 120 | 72_22P | 不適用 | 不適用 | 88_CC | 12930 | 120 | 72_22P | 不適用 | 不適用 | 88_CC | 72_22P | 88_CC |
| 28447 | 155 | 72_22P | 不適用 | SS_YY | 不適用 | 28447 | 155 | 72_22P | 不適用 | SS_YY | 不適用 | 72_22P | SS_YY |
| 33380 | 138 | 不適用 | 72_88P | 不適用 | 88_CC | 33380 | 138 | 不適用 | 72_88P | 不適用 | 88_CC | 72_88P | 88_CC |
| 18186 | 769 | 72_22P | 不適用 | 不適用 | 88_CC | 18186 | 769 | 72_22P | 不適用 | 不適用 | 88_CC | 72_22P | 88_CC |
| 27557 | 91 | 不適用 | 72_88P | 不適用 | 88_CC | 27557 | 91 | 不適用 | 72_88P | 不適用 | 88_CC | 72_88P | 88_CC |
| 14863 | 116 | 72_22P | 不適用 | 不適用 | 88_CC | 14863 | 116 | 72_22P | 不適用 | 不適用 | 88_CC | 72_22P | 88_CC |
| 29928 | 204 | 不適用 | 72_88P | SS_YY | 不適用 | 29928 | 204 | 不適用 | 72_88P | SS_YY | 不適用 | 72_88P | SS_YY |
| 15809 | 70 | 72_22P | 不適用 | 不適用 | 88_CC | 15809 | 70 | 72_22P | 不適用 | 不適用 | 88_CC | 72_22P | 88_CC |
| 21701 | 269 | 72_22P | 不適用 | SS_YY | 不適用 | 21701 | 269 | 72_22P | 不適用 | SS_YY | 不適用 | 72_22P | SS_YY |
| 27937 | 110 | 不適用 | 72_88P | SS_YY | 不適用 | 27937 | 110 | 不適用 | 72_88P | SS_YY | 不適用 | 72_88P | SS_YY |
| 20136 | 454 | 72_22P | 不適用 | SS_YY | 不適用 | 20136 | 454 | 72_22P | 不適用 | SS_YY | 不適用 | 72_22P | SS_YY |
| 27934 | 866 | 不適用 | 72_88P | 不適用 | 88_CC | 27934 | 866 | 不適用 | 72_88P | 不適用 | 88_CC | 72_88P | 88_CC |
| 18186 | 759 | 72_22P | 不適用 | SS_YY | 不適用 | 18186 | 759 | 72_22P | 不適用 | SS_YY | 不適用 | 72_22P | SS_YY |
| 27937 | 106 | 不適用 | 72_88P | SS_YY | 不適用 | 27937 | 106 | 不適用 | 72_88P | SS_YY | 不適用 | 72_88P | SS_YY |
| 11921 | 170 | 72_22P | 不適用 | SS_YY | 不適用 | 11921 | 170 | 72_22P | 不適用 | SS_YY | 不適用 | 72_22P | SS_YY |
| 15809 | 275 | 72_22P | 不適用 | SS_YY | 不適用 | 15809 | 275 | 72_22P | 不適用 | SS_YY | 不適用 | 72_22P | SS_YY |
| 26314 | 222 | 72_22P | 不適用 | 不適用 | 88_CC | 26314 | 222 | 72_22P | 不適用 | 不適用 | 88_CC | 72_22P | 88_CC |
| 25323 | 274 | 72_22P | 不適用 | SS_YY | 不適用 | 25323 | 274 | 72_22P | 不適用 | SS_YY | 不適用 | 72_22P | SS_YY |
| 21684 | 305 | 72_22P | 不適用 | 不適用 | 88_CC | 21684 | 305 | 72_22P | 不適用 | 不適用 | 88_CC | 72_22P | 88_CC |
| 25931 | 453 | 不適用 | 72_88P | SS_YY | 不適用 | 25931 | 453 | 不適用 | 72_88P | SS_YY | 不適用 | 72_88P | SS_YY |
| 19928 | 462 | 不適用 | 72_88P | SS_YY | 不適用 | 19928 | 462 | 不適用 | 72_88P | SS_YY | 不適用 | 72_88P | SS_YY |
| 16925 | 12 | 不適用 | 72_88P | 不適用 | 88_CC | 16925 | 12 | 不適用 | 72_88P | 不適用 | 88_CC | 72_88P | 88_CC |
| 15927 | 8 | 不適用 | 72_88P | SS_YY | 不適用 | 15927 | 8 | 不適用 | 72_88P | SS_YY | 不適用 | 72_88P | SS_YY |
| 12930 | 35 | 72_22P | 不適用 | 不適用 | 88_CC | 12930 | 35 | 72_22P | 不適用 | 不適用 | 88_CC | 72_22P | 88_CC |
| 21702 | 178 | 72_22P | 不適用 | SS_YY | 不適用 | 21702 | 178 | 72_22P | 不適用 | SS_YY | 不適用 | 72_22P | SS_YY |
這是執行此操作的一種方法。它會更改適當的值,因此請確保您已保存表的原始副本。要糾正整個表,需要做的就是創建列名的 2 個比較列表(compList1 和 compList2)
Names Default To Here( 1 );
dt = Current Data Table();
// Create the lists of the columns to be compaired
// compList1[1] will be compired with compList2[1] etc.
compList1 = {"WR@689700@WFI*HHC 56XYZ", "WR@780990@UW*FFY 78XYZ"};
compList2 = {"WR@689799@WFI*HH 56XYZ W", "WR@780666@UW*FFY 78XYZ"};
// Loop across the columns, finding which rows to be changed and
// then loop across those rows and change them
For( i = 1, i <= N Items( compList1 ), i++,
// Find which rows to change
theRows = dt << get rows where( As Column( dt, compList1[i] ) == "NA" & As Column( dt, compList2[i] ) != "NA" );
// Change the rows
For( k = 1, k <= N Rows( theRows ), k++,
Column( dt, compList1[i] )[theRows[k]] = Column( dt, compList2[i] )[theRows[k]]
);
);
// Delete the duplicate columns
dt << delete columns( compList2 );