Matrice associativa per rinominare le colonne della tabella datiSalve JMP Community,
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 ciò che è in questo thread Qui . Pensavo di poter fare qualcosa 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 del ciclo For.
Grazie per qualsiasi pensiero e feedback su questo !,
DS
Tabella datiScriptingOggetto: matrice associativa 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 si desidera iterativo 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>Oggetto: matrice associativa 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 tanto per i cicli, ma speravo di codificare il rinominare in un modo più elegante. Il collegamento all'altro thread era una soluzione molto elegante per riordinare i valori delle colonne in base all'immissione numerica di un'altra colonna. Il modo in cui l'array associativo funzionava in quello script era come pensavo che avrebbe funzionato per le colonne della tabella, ma chiaramente non è così. Ho rinominato le colonne con i cicli For in passato utilizzando gli elenchi {...}, ma stavo cercando di provare un modo diverso senza i cicli. Tuttavia, mi piace il metodo di array associativo che hai presentato e lo farò in questo modo piuttosto che creare elenchi.
Immagino stavo pensando 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 la soluzione alla mia domanda sull'utilizzo di array associativi per rinominare le colonne. È ora di tornare ai dati!
Grazie!,
DS
Oggetto: matrice associativa per rinominare le colonne della tabella datiPer essere chiari, ho codificato il contenuto dell'array solo per avere un esempio funzionante: ha ancora senso popolare le chiavi ei valori da una tabella separata.Notare anche che non c'era bisogno di Evals, Expr's, ecc. Buona fortuna.
Oggetto: matrice associativa 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. Ancora una volta, grazie per l'aiuto!
DS