I migliori suggerimenti per lo scriptingCiao comunità,
Ho iniziato il corso di scripting che Monica Beals ha contribuito a realizzare: Introduzione al linguaggio di scripting JMP - Comunità degli utenti JMP
Sto ancora imparando, ma ho una domanda fondamentale
Qual è un comando/suggerimento di scripting che ritieni che tutti dovrebbero conoscere o che vorresti conoscere prima?
ad esempio: pickfile è utile da conoscere poiché ti consente di scegliere qualsiasi file su cui desideri eseguire una serie di comandi.
Ri: Migliori suggerimenti per lo scriptingTre cose che avrei voluto sapere prima:
- Open() spesso consente allo scripter di saltare lo script Pick File()
- Alt+doppio clic su qualsiasi funzione nella finestra dello script ti porta direttamente all'indice degli script per quella funzione
- La creazione di script per il livello del report è più semplice di quanto sembri, soprattutto con la recente aggiunta della sezione Percorso casella del visualizzatore Proprietà:
-

Ri: Migliori suggerimenti per lo scriptingNe aggiungerò 3 ai tre di @Jed_Campbell :
- In nessun caso la tabella dati corrente deve essere utilizzata per impostare la tabella dati corrente. È necessario accedere alle tabelle in modo esplicito tramite un riferimento alla variabile istanziato al momento della creazione della tabella. Molti scripter hanno difficoltà a tenere traccia di quale tabella è la tabella corrente, in particolare quando sono presenti molti Join , Stack o Subset . Oltre a ciò, la tabella impostata come la tabella attuale è cambiata nel corso degli anni a seconda dell'operazione. Ho visto che questo ha causato l'interruzione di più script di qualsiasi altra cosa.
- Non scherzare con SendToReport . Le sue funzionalità non sono ben documentate e c'è (quasi?) sempre un messaggio che semplifica il lavoro e rende il codice più leggibile.
- Scopri come utilizzare la gestione delle espressioni ( Substitute , Eval , Expr e Name Expr ). @joseph_morgan ( qui ) e @drewfoglia ( qui e qui ) hanno materiale Discovery che fa un ottimo lavoro parlando di questo concetto. Ho due ricette nel JSL Cookbook che ne parlano qui e qui ). È un argomento difficile da comprendere chiaramente. Una volta padroneggiato, tuttavia, sarai in grado di fare cose che non sarebbero possibili in nessun altro modo. Se non è possibile farlo con la gestione delle espressioni, non è possibile farlo in JSL.
Ri: Migliori suggerimenti per lo scriptingPer non sottovalutare tutto ciò che è già stato detto, ma il punto 3 di @DonMcCormack è la cosa più importante che puoi imparare dopo. La gestione delle espressioni è incredibilmente potente e ti dà accesso a funzionalità JSL sbalorditive. Una volta che ti rendi conto che tutto in JSL è un'espressione, inizi a guardare i tuoi script in modo completamente diverso. Successivamente studierei i materiali di Joseph e Drew e lavorerei sui loro esempi.
Dopodiché, i miei preferiti personali sono:
- I nuovi cicli For Each() (e i loro parenti, Filter Each() e For Each Row()). A meno che tu non abbia bisogno di uno script da eseguire su versioni JMP molto vecchie, dimenticherei semplicemente che esiste il vecchio ciclo For().
- Relativo a 1, la versione abbreviata della funzione indice: cioè, 1::10::2 creerebbe un vettore che inizia da 1 contando fino a 10 per 2 (ti darebbe 1,3,5,7,9) che tu potrebbe utilizzare nel ciclo For Each().
- L'array associativo e come utilizzarlo (incluso il modo in cui viene trattato dal ciclo For Each()).
- Imparare a usare le matrici invece delle tabelle di dati per tutto il possibile (e come usarle con il ciclo For Each()).
Ri: Migliori suggerimenti per lo scriptingVisto che sei nuovo:
- Punto e virgola. Se qualcosa si rompe in JMP (o SAS), guarda prima qui. Soluzione semplice e casella da spuntare, e così spesso il colpevole. Parentesi e parentesi quadre successive. [1b. Il registro spesso non è in grado di rappresentare correttamente queste frasi eseguite. Di solito guarda anche le righe di codice precedenti.]
- Usa Print() generosamente mentre costruisci/testa il tuo script. "Questa variabile è il valore che mi aspetto in questa fase del ciclo": Print("Nomevar: " || nomevar). "In quale fase il processo è sospeso (ad esempio, ciclo infinito)?" Print("Passaggio 3 completato, prima del passaggio 4"). [2b: se è probabile che il progetto continui a crescere, crea una variabile da utilizzare come flag indicatore (0/1 o T/F) e utilizza le istruzioni If() per attivare le istruzioni Print() quando desideri eseguire il debug .]
- Come DoE, inizia in piccolo. Ad esempio, se vuoi eseguire 100 elementi attraverso un ciclo For Each(), testa il ciclo utilizzando solo i primi 2-4. Risparmia l'attesa e il potenziale arresto anomalo.
Mike ha anche una serie di blog che espande i suoi pensieri qui: https://community.jmp.com/t5/JMPer-Cable/The-1st-thing-I-wish-I-knew-when-I-started-scripting- Ci sono/ba-p/276580
Per quanto riguarda le funzioni Eval/Expr, non ho ancora scritto abbastanza JSL per sentirmi a mio agio con queste. Ma niente nella mia esperienza di programmazione è stato così toccante come poter usare & (e &&&... bei ricordi!) nella struttura macro di SAS e finora ho pensato a Eval/Expr come al parallelo di JSL. (Contesto: gran parte della mia carriera pre-JMP è stata la programmazione SAS, ma mi sono dilettato in altre cose).
Ri: Migliori suggerimenti per lo scriptingIl tuo elemento n. 1 mi ricorda un grande trucco che tutti dovrebbero conoscere: Ctrl-[ seleziona tutto tra parentesi. Ciò è molto utile per il debugging, il controllo della completezza e soprattutto per le modifiche al codice (copia/incolla/sostituisci).