关于表合并问题,如何使用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 | WR @ 1 | WR @ 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 );