Trabajo con datos de procesos de fabricación de productos químicos (piense en temperatura, presión, flujo, composición, etc.) que se recuperan de un historial de procesos. Cada variable tiene un nombre de equipo (etiqueta) como: LP1LCA0311 y un descriptor (glosario) como: Nivel F-301. Cuando se exporta automáticamente de Excel a JMP, el glosario se usa como nombre de columna. El glosario es creado por humanos y, por lo tanto, no suele ser coherente. A menudo, tiene sentido usar un alias en lugar del glosario: funcionalmente, F-301 es el colector de polvo de baja presión; alias = LVL.LP.DC.
Estamos construyendo tableros para monitorear nuestros procesos. Aquí hay un ejemplo:
- seis reactores con 31 columnas de medición + sello de tiempo
- necesita cambiar el nombre de las columnas del glosario al formato de alias estándar como: RX#.LVL; RX#.F.Feed; etc.
- el formato estándar permitirá un apilamiento fácil: puede crear una columna llamada Reactor que usa las funciones IZQUIERDA() o PALABRA(); cambie el nombre de la columna de datos usando la función RIGHT().
Me gustaría:
Use una segunda tabla de datos (DT2) para cambiar el nombre de las columnas en la primera tabla de datos (DT1)
DT2 contiene 2 columnas: Old.Name = nombres de columna DT1; New.Name = nuevos nombres de columna introducidos manualmente (alias)
El script debe tomar Old.Name e insertarlo en la nueva propiedad de columna = "OldName" en DT1
El script luego cambia el nombre de las columnas DT1 usando DT2 New.Name
El siguiente fragmento de código de Jerry Cooper muestra cómo realizar el paso de propiedad de columna:
// 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) );
)
);
¿Cómo escribiría los pasos para cambiar el nombre de las columnas en DT1?
¿Alguien tiene una mejor manera de lograr lo que quiero?
¡Guau! ¡Esto funcionó de una vez! ¡¡¡Gracias!!!
Prueba esto a ver si es lo que quieres
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]] );
);
);