我使用從過程歷史記錄中檢索到的化學製造過程資料(例如溫度、壓力、流量、成分等)。 每個變數都有一個設備(標籤)名稱(如: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]] );
);
);