Lavoro con i dati del processo di produzione chimica (si pensi alla temperatura, alla pressione, al flusso, alla composizione, ecc.) recuperati da uno storico del processo. Ogni variabile ha sia un nome dell'apparecchiatura (tag) come: LP1LCA0311 sia un descrittore (glossario) come: Livello F-301. Quando viene esportato automaticamente da Excel a JMP, il glossario viene utilizzato come nome della colonna. Il glossario è creato dagli esseri umani e quindi solitamente non è coerente. Spesso ha senso usare uno pseudonimo invece del glossario: funzionalmente, F-301 è il collettore di polveri a bassa pressione; alias = LVL.LP.DC.
Stiamo costruendo dashboard per monitorare i nostri processi. Ecco un esempio:
- sei reattori con 31 colonne di misura + timestamp
- è necessario rinominare le colonne dal glossario al formato alias standard come: RX#.LVL; RX#.F.Alimentazione; eccetera.
- il formato standard consentirà un facile impilamento: può creare una colonna denominata Reactor che utilizza le funzioni LEFT() o WORD(); rinominare la colonna Dati utilizzando la funzione DESTRA().
Vorrei:
Utilizzare una seconda tabella dati (DT2) per rinominare le colonne nella prima tabella dati (DT1)
DT2 contiene 2 colonne: Old.Name = nomi di colonna DT1; New.Name =inserisci manualmente i nuovi nomi delle colonne (alias)
Lo script dovrebbe prendere Old.Name e inserirlo nella nuova colonna property = "OldName" in DT1
Lo script rinomina quindi le colonne DT1 utilizzando DT2 New.Name
Lo snippet di codice riportato di seguito da Jerry Cooper mostra come eseguire il passaggio della proprietà della colonna:
// 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) );
)
);
Come scriverei i passaggi per rinominare le colonne in DT1
Qualcuno ha un modo migliore per realizzare ciò che voglio?
Oh! ha funzionato in un colpo solo! Grazie!!!
Prova questo e vedi se è quello che vuoi
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]] );
);
);