我使用从过程历史记录中检索到的化学制造过程数据(例如温度、压力、流量、成分等)。 每个变量都有一个设备(标签)名称(如:LP1LCA0311)和一个描述符(术语表)(如:F-301 Level)。 自动从 Excel 导出到 JMP 时,术语表将用作列名称。 该术语表是由人类创建的,因此通常不一致。 通常,使用别名而不是术语表是有意义的:从功能上来说,F-301 是低压除尘器;从功能上来说,F-301 是低压除尘器;别名 = LVL.LP.DC。
我们正在构建仪表板来监控我们的流程。 这是一个例子:
- 6 个反应器,31 个测量列 + 时间戳
- 需要将术语表中的列重命名为标准别名格式,例如:RX#.LVL; RX#.F.进给; ETC。
- 标准格式将允许轻松堆叠:可以创建一个名为 Reactor 的列,它使用 LEFT() 或 WORD() 函数;使用 RIGHT() 函数重命名数据列。
我想:
使用第二个数据表 (DT2) 重命名第一个数据表 (DT1) 中的列
DT2 包含 2 列: Old.Name = DT1 列名称; New.Name =手动输入的新列名称(别名)
脚本应采用 Old.Name 并插入到 DT1 中的新列属性 =“OldName”
然后,脚本使用 DT2 New.Name 重命名 DT1 列
下面来自 Jerry Cooper 的代码片段显示了如何执行列属性步骤:
// Script to take units from column name and assign to column property
// received from Jerry Cooper of SAS 03-Mar-2014
// Data table should have column names of form: Name|units
// Script assumes that units are after "|"
// Easy to set up header row in Excel to concatenate name and units
Names Default To Here( 1 );
dt = Current Data Table();
mycols = dt << Get Column Names( string );
For( i = 1, i <= N Items( mycols ), i++,
If( Contains( mycols[i], "|" ),
myunits = Substr( mycols[i], Contains( mycols[i], "|", -1 ) + 1 );
newname = Substr( mycols[i], 1, Contains( mycols[i], "|", -1 ) - 1 );
Column( i ) << Set Name( newname );
Column( i ) << Set Property( "Units", eval(myunits) );
)
);
我如何编写脚本来重命名 DT1 中的列
有没有人有更好的方法来实现我想要的?
试试这个,看看是不是你想要的
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt2 = New Table( "Lookup",
Add Rows( 1 ),
New Column( "Old Name", Character, "Nominal", Set Values( {"Sex"} ) ),
New Column( "New Name", Character, "Nominal", Set Values( {"Gender"} ) )
);
ColList = dt << get column names( string );
For( i = 1, i <= N Items( ColList ), i++,
FoundName = dt2 << get rows where( Uppercase( :OldName ) == Uppercase( ColList[i] ) );
If( N Rows( FoundName ) > 0,
Column( dt, ColList[i] ) << set property( "Old Name", Eval( ColList[i] ) );
Column( dt, ColList[i] ) << set name( dt2:New Name[FoundName[1]] );
);
);