clonare una colonna<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao a tutti,
Voglio clonare una colonna nella tabella dei dati (creare una nuova colonna identica in tutto tranne il nome). Esiste un modo più elegante (e robusto) per farlo o devo estrarre i valori e tutte le proprietà e assegnarli alla nuova colonna come tale:
dt3 = Aprire ( "$SAMPLE_DATA/Auto.jmp" ) ;
// aggiunge una proprietà della colonna
dt3 : Fare << Imposta proprietà (
"Colori di valore" ,
{ "Accura" = - 13977687 , "Audi" = - 3780931 , "BMW" = - 4222943 , "Buic" = -
13596966 , "Cadillac" = - 2211217 , "Chevrol" = - 10562780 , "Chrysler" = -
13156647 , "Daihatsu" = - 2078390 , "Schivare" = - 13182413 , "Aquila" = - 9549600 ,
"Guado" = - 2334147 , "Geologico" = - 13772446 , "Honda" = - 9282864 , "Hyundai" = -
6995852 , "Infinito" = - 1524612 , "Izuzu" = - 9458080 , "Jeep" = - 14452073 ,
"Lexus" = - 6391856 , "Lincoln" = - 2745505 , "Mazza" = - 10199751 , "Mercedes" =
- 7150697 , "Mercurio" = - 10513726 , "Mitsubishi" = - 8381519 , "Nissan" = -
3502441 , "Oldmobile" = - 3615440 , "Peugeot" = - 13925307 , "Plymouth" = -
11502354 , "Pontiaco" = - 7449196 , "Renault" = - 9229791 , "Saab" = - 4074344 ,
"Saturno" = - 13050224 , "Subaru" = - 12565885 , "SUZUKI" = - 2068529 , "Toyota" =
- 4494272 , "Volkswagen" = - 11824110 , "Volvo" = - 8734293 , "Jugo" = - 13849421 }
) << cella colore per valore ;
// clona la colonna
clone_colonna = dt3 : Fare << Ottieni copione ;
clone_colonna ;
Ri: clonare una colonnaNo, questa interpretazione è completamente sbagliata.
Lo scripting di JMP in genere comporta l'utilizzo di oggetti JMP incorporati come tabelle di dati, colonne di dati o piattaforme di analisi. Si utilizzano questi oggetti inviando un messaggio all'oggetto che indica l'azione desiderata. La forma generale è mostrata qui in entrambe le versioni: utilizzando la funzione JMP effettiva e utilizzando l'operatore equivalente.
Send( object, message );
object << message;
L'oggetto è rappresentato da un valore di riferimento. Il messaggio è rappresentato dal nome. Questo esempio è interpretato nel modo seguente:
dt3:Make << Get Script
Invia il messaggio Ottieni copione all'oggetto denominato dt3:Fai . Questo riferimento utilizza il modulo tabella: colonna . Un riferimento a una tabella di dati è stato precedentemente memorizzato nella variabile dt3 . Il riferimento alla colonna è per nome.
Il messaggio Ottieni copione può essere inviato a qualsiasi oggetto JMP. Il metodo 'getter' alla base di questo messaggio viene sovrascritto da ciascun oggetto per restituire lo script che riprodurrà l'oggetto originale. Cioè, restituisce il codice che clonerà l'oggetto. Quindi puoi sempre utilizzare lo stesso messaggio per ottenere il codice univoco per qualsiasi oggetto.
Ri: clonare una colonnaGrazie per la spiegazione e la rapida risposta. Immagino che Get sia il nome dello script che è "integrato" in jmp e viene eseguito. Altrimenti come saprebbe clonare la colonna invece di eseguire qualche altra operazione. Ho imparato molto dalla tua risposta.
Ri: clonare una colonnaRisolviamolo nell'ordine in cui verrà valutata l'espressione.
dt3:Make << Get script
Il messaggio farà sì che JMP restituisca il codice JSL che creerebbe la stessa colonna.
Eval(dt3:Make << Get script)
Il codice JSL viene valutato risultando in una nuova colonna di dati che è una copia della colonna :Make originale. La funzione Eval() restituirà anche un riferimento a quella nuova colonna.
Eval(dt3:Make << Get script) << set name("Clone");
Infine, invia alla nuova colonna il messaggio per modificare il nome della nuova colonna utilizzando il riferimento all'oggetto.
Ri: clonare una colonnaCiao MS, ti dispiacerebbe spiegare come questo comando clona la colonna selezionata in un dt? Eval(dt3:Make << Ottieni script) << set name("Clone"); Mi rendo conto che questo non è normalmente il tipo di domanda posta qui ed è stato 5 anni fa, ma questo è il comando più opaco che ho visto in qualsiasi linguaggio di programmazione che ho usato. Comunque funziona benissimo!Ri: clonare una colonnaGrazie SM ,
È vero che i colori non sono molto utili in una tavola privata.
il fatto è che sto scrivendo un algoritmo basato su un processo euristico. questo significa che ho bisogno di uno script che faccia quello che farei se dovessi "leggere" le righe di dati una per una da solo e interpretarle (qui è dove ho bisogno dei colori). d'altra parte lo script deve essere veloce durante l'esecuzione, quindi ho bisogno di rimbalzare indietro e quarto tra i tavoli che vedo e quelli veloci (privati). questa transizione tra tabelle visive e private introduce sfide di robustezza durante lo scripting su alcune tabelle aperte.
Ron
Ri: clonare una colonnaNon sono davvero sicuro di quale valore ci sia nel mantenere le proprietà delle colonne come i colori dei valori in una tabella privata.Se i dati sono tutto ciò che ti interessa (in genere vero per le tabelle private), potrebbe essere utilizzato il metodo più semplice di seguito:
dt3 << Nuova Colonna ( "Crea un clone" , Formula ( dt3 : Fare ))
Ri: clonare una colonnaGrazie Dave@Pega-Analytics xnelson ,
questo è quello che stavo cercando. non mi aspettavo che la duplicazione di una colonna fosse così ingombrante.
il seguente è il mio script finale:
I nomi predefiniti sono qui ( 1 ) ;
dt3 = Aprire ( "$SAMPLE_DATA/Auto.jmp" , privato ) ;
// clone nella stessa tabella
Valutazione ( Analizza ( "(dt3<<" || char ( dt3 : Fare << Ottieni copione ) || ") << imposta nome(\!"Clona\!");" )) ;
// prova che la colonna è stata clonata - controlla il log
dt3 : Clone << ottenere la sceneggiatura ;
vicino ( dt3 , nessun salvataggio ) ;
migliore,
Ron
Ri: clonare una colonnaEcco un esempio completo di un modo per anteporre il puntatore della tabella dati:
Eval(Parse("(dtxxx<<"||char(dt3:Make << Get script)||") << set name(\!"Clone\!");"));
Ri: clonare una colonnaPuoi renderlo più robusto modificando la variabile di script prima della valutazione, ad esempio anteponendo "dt << " all'espressione.
Ri: clonare una colonnail problema di robustezza si è verificato durante l'utilizzo di tabelle private poiché il clone è stato inviato a un'altra tabella che non era privata.
Ri: clonare una colonnaGrazie SM ,
sono sorpreso che non ci sia alcun comando jsl per duplicare una colonna esistente. inoltre se dt3 non è la tabella attiva crea la nuova colonna in un'altra tabella.
Ri: clonare una colonnaMi sembra molto elegante. Hai avuto problemi con la robustezza?
Se non vuoi sprecare memoria su una variabile, puoi semplificare int o una riga:
Valutazione ( dt3 : Fare << Ottieni copione ) << imposta nome ( "Clone" ) ;
Per clonare più colonne, prenderei in considerazione la creazione di un sottoinsieme di queste, rinominare le colonne e aggiornarle con la tabella dati originale.