Lo scripting JMP comporta spesso l'utilizzo di oggetti colonna di dati. Potremmo voler calcolare le statistiche per una colonna di dati numerici. Potremmo voler modificare un attributo o una proprietà di colonna. In ognuno di questi casi, abbiamo bisogno di un riferimento alla colonna in modo da poterlo fornire come argomento. Esistono diversi modi per ottenere o utilizzare un riferimento. Sfortunatamente, potrebbero sembrare equivalenti fino a un certo punto fino a quando non siamo sorpresi. Una teoria scientifica è testabile. Una teoria vale fino a quando un test non la invalida. Testiamo alcune teorie sui riferimenti alle colonne.
Sto usando il altezza colonna di dati nella tabella di dati Big Class dalla cartella di dati di esempio JMP, ovvero C: \ Programmi \ SAS \ JMPPRO \ 15 \ Samples \ Data nel mio caso. Iniziamo.
Names Default To Here( 1 );
// open a data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Il nostro primo test utilizzerà diverse forme di riferimento di colonna per altezza .
// use a reference to a data column
sum = Col Sum( :height );
Show( sum );
sum = Col Sum( Column( "height" ) );
Show( sum );
sum = Col Sum( Column( 4 ) );
Show( sum );
sum = Col Sum( :Name( "height" ) );
Show( sum );
sum = Col Sum( As Column( "height" ) );
Show( sum );
OK, cosa abbiamo ottenuto?

Lo stesso risultato ogni volta. Quindi la mia teoria è che questi cinque diversi riferimenti sono equivalenti. Il mio primo test conferma la mia teoria. Ma è solo il primo test. Inventiamo un altro test. Prendiamo prima il riferimento di colonna, memorizzalo, quindi usiamo il riferimento memorizzato per calcolare la stessa statistica.
// get a reference to a data column and then use it
col = Column( "height" );
sum = Col Sum( col );
Show( sum );
col = Column( 4 );
sum = Col Sum( col );
Show( sum );
col = :Name( "height" );
sum = Col Sum( col );
Show( sum );
col = As Column( "height" );
sum = Col Sum( col );
Show( sum );
Tieni presente che non ho incluso la prima forma di riferimento, :altezza perché il valore restituito e memorizzato nell'espressione col =: altezza manca (".")! Questo risultato non aiuta la mia teoria! Cosa abbiamo ottenuto con il resto del test?

Apetta un minuto! Non ho ricevuto un singolo errore ma non ho ottenuto lo stesso risultato ogni volta. I primi due risultati sono corretti ma gli ultimi due sono sbagliati. (Nota che ci sono 40 righe dentro altezza e l'ultima altezza = 70. 40 * 70 = 2800 tra l'altro.) Eseguiamo un altro test della mia teoria. Otteniamo di nuovo un riferimento di colonna, archiviamolo e quindi usiamolo per inviare un messaggio.
// get a reference to a data column and then use it
col = Column( "height" );
type = col << Get Data Type;
Show( type );
col = Column( 4 );
type = col << Get Data Type;
Show( type );
col = :Name( "height" );
type = col << Get Data Type;
Show( type );
col = As Column( "height" );
type = col << Get Data Type;
Show( type );
Ecco cosa ottengo con i primi due modi.

I primi due modi sembrano funzionare come previsto. Proviamo la terza via.
col = :Name( "height" );
type = col << Get Data Type;
Show( type );
In questo modo non ha funzionato.

E l'ultimo modo?
col = As Column( "height" );
type = col << Get Data Type;
Show( type );
Ottengo lo stesso errore dell'ultima volta.

È chiaramente tempo di rivedere la mia teoria. (E forse per confidare con gli sviluppatori JMP.) La mia teoria ora è quella
- :altezza , Colonna ("altezza") , Colonna (4) , : Nome ("altezza") , e Come colonna ("altezza") tutti funzionano o agiscono come validi riferimenti di colonna.
- Colonna ("altezza") e Colonna (4) sono funzioni che restituiscono un riferimento di colonna.
- :altezza , : Nome ("altezza") , e Come colonna ("altezza") siamo non funzioni che restituiscono un riferimento di colonna.
- Come Colonna() è un alias per i due punti (" : ") operatore scoping, come visto in :altezza , che restituiscono entrambi il valore della riga corrente se utilizzato in un'assegnazione.
Qual è la mia raccomandazione?
- Uso :altezza , Colonna ("altezza") , Colonna (4) , : Nome ("altezza") , o Come colonna ("altezza") come riferimento di colonna.
- Uso Colonna ("altezza") o Colonna (4) funzioni per ottenere un riferimento di colonna.
- Non usare :altezza , : Nome ("altezza") , o Come colonna ("altezza") per ottenere un riferimento di colonna.
Spero che questo adattamento (abominio?) Del metodo scientifico abbia aiutato a chiarire come i riferimenti alle colonne possono essere utilizzati negli script JMP. Spero che tu segua le raccomandazioni ed eviti ulteriori confusioni e frustrazioni.
@markbailey
quando si esegue il codice
names default to here(1);
// get a reference to a data column and then use it
col = Column( "height" );
sum = Col Sum( col );
Show( sum );
col = Column( 4 );
sum = Col Sum( col );
Show( sum );
col = :Name( "height" );
sum = Col Sum( col );
Show( sum );
col = As Column( "height" );
sum = Col Sum( col );
Show( sum );
Non ottengo i risultati ...... eseguendo JMP 15.1. Quello che ottengo è:
sum = 2502;
sum = 2502;
sum = .;
sum = .;
Cosa mi sto perdendo?
Non penso che ti manchi nulla!
Sto usando anche JMP Pro 15.1. L'ho riavviato prima di testare il codice. A parte questo, non sono sicuro di cosa potrebbero esserci differenze tra le esperienze.
Grazie per la continuazione del test della mia teoria e del tuo contributo!