Array associativo per rinominare le colonne della tabella datiCiao comunità JMP,
Ho una tabella dati (dt1) con molte colonne e vorrei rinominarle. Sono codificati con nomi strani. Ma ho un'altra tabella di dati (dt2) con solo due colonne: Nome e: Codice. Ogni riga in dt2 ha il nome significativo associato al codice.
So come farlo con i cicli for, ma sto cercando di imparare qualcosa di nuovo e spero di farlo attraverso un array associativo. Qualcosa di simile a quello che c'è in questo thread Qui . pensavo di poter fare una cosa del genere:
Names Default To Here( 1 );
dt = Data Table( "dt1" );
dtnames = Data Table( "dt2" );
aa_name_code = Associative Array(
Column( dtnames, "Name" ) << Get Values,
Column( dtnames, "Code" ) << Get Values
);
aavalues = aa_name_code << Get Values;
aakeys = aa_name_code << Get Keys;
Eval( Eval Expr( Column(dt,Expr( aavalues )))) << Set Name( Expr( aakeys ) ) ) );
Ma, sfortunatamente, questo non funziona. Non si sta comportando come me Pensiero gli array associativi si sono comportati.
Ancora una volta, voglio provare a imparare qualcosa di nuovo e migliorare con un nuovo comando JSL, motivo per cui voglio lavorare attraverso l'Associative Array. Se non è possibile, lo farò con la forza bruta For-Loop.
Grazie per qualsiasi pensiero e feedback su questo!,
DS
Tabella datiScriptingOggetto: array associativo per rinominare le colonne della tabella datiCIAO @David_Burnham ,
Sì, ho seguito il tuo esempio e ho capito l'hardcoding. Quando si lavora con un'altra tabella di colonne Nome e Codice, è stato facile creare l'array associativo (nota: deve essere nell'ordine corretto) in modo che quando si impostano i nomi delle colonne, applichi il valore corretto alla chiave corrispondente. L'ho eseguito e ha funzionato perfettamente. Di nuovo, grazie per l'aiuto!
DS
Oggetto: array associativo per rinominare le colonne della tabella datiGiusto per essere chiari, ho codificato il contenuto dell'array solo per avere un esempio funzionante: ha ancora senso popolare le chiavi e i valori da una tabella separata.Nota anche che non c'era bisogno di nessuno degli Evals, Expr's, ecc. Buona fortuna.
Oggetto: array associativo per rinominare le colonne della tabella datiCIAO @David_Burnham ,
Grazie per il tuo feedback. Ho chiaramente bisogno di leggere di più negli array associativi. Non mi dispiace così tanto For Loops, ma speravo di codificare la ridenominazione in un modo più elegante. Il collegamento all'altro thread era una soluzione molto elegante per riordinare i valori delle colonne in base alla voce numerica di un'altra colonna. Il modo in cui l'array associativo ha funzionato in quello script era come pensavo avrebbe funzionato per le colonne della tabella, ma chiaramente non funziona. In passato ho rinominato le colonne con For Loops utilizzando gli elenchi {...}, ma stavo cercando di provare un modo diverso senza loop. Tuttavia, mi piace il metodo dell'array associativo che hai presentato e lo farò in questo modo piuttosto che creare elenchi.
Immagino di aver pensato che con un elenco dei nomi delle colonne nella prima tabella dati e l'array associativo dalla seconda tabella dati, si potrebbero facilmente riassegnare i nomi a causa dell'array associativo, quasi come una funzione di "ricodifica" per la colonna nomi.
Ad ogni modo, apprezzo la tua risposta e soluzione alla mia domanda sull'utilizzo di array associativi per rinominare le colonne. È ora di tornare ai dati!
Grazie!,
DS
Oggetto: array associativo per rinominare le colonne della tabella datiL'utilizzo di array associati e cicli for non si escludono a vicenda.So che a molte persone piace evitare i cicli for, ma alla fine della giornata vuoi iterare sulle colonne di una tabella e i cicli for sono progettati per eseguire l'iterazione.
namesDefaultToHere(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
arr = [=>];
arr["name"] = "first name";
arr["age"] = "age";
arr["sex"] = "gender";
arr["height"] = "height (inches)";
arr["weight"] = "weight (lbs)";
for (i=1,i<=ncols(dt),i++,
cname = column(i)<<GETNAME></GETNAME>