Errore durante la creazione di richieste<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Sono nuovo con JMP e ho trovato quei bei esempi sulla creazione di bei prompt nel libro "Jump into JMP scripting".
Tuttavia, non so come creo un semplice prompt e creo un sottoinsieme con scripting basato su quei valori che seleziono da quel prompt.
Prompt dovrebbe "raccogliere" i valori da una variabile di colonna di caratteri "yearm", ad esempio vorrei creare un generatore di grafici basato su valkues yearmonth tra [201007, 201012].
Tutti i commenti sono i benvenuti. Grazie in anticipo per avermi aiutato con questo problema.
Messaggio di errore: pedice non valido (deve essere un numero o un elenco di numeri){1} nell'accesso o nella valutazione di 'Pedice' , trimestre[select1 << get]
Ecco un po' di codice:
Riepiloga( trimestre= Per( Colonna( dt, "yearm" ) ) );
nw = Nuova finestra( "Scegli quarti",
hb = Panel Box( "Scegli annom",
select1 = Casella di riepilogo ( trimestre,
dt << Seleziona dove(
:yearm== trimestre[select1 << get] );
selRows = dt << Ottieni righe selezionate;
)
),
Casella dei pulsanti ("OK",
nw << Chiudi finestra;
dt << Seleziona dove(
:yearm== trimestre[select1 << get]
);
/* Le righe selezionate vengono suddivise in una nuova tabella. */
dt << Subset( Output Table Name( "Chosen quarters" ) );
)
);
Re: Errore durante la richiestaOk, lo proverò e risponderò quando il mio JMP verrà aggiornato a 10. L'aggiornamento dei media è arrivato ma è ancora in attesa.
Grazie mille, sei un utente così professionista con questo. Spero di imparare anch'io qualcosa.
Re: Errore durante la richiestaAhia! Quindi Contains() sarà dolorosamente lento. Suggerisco di utilizzare il Data Filter() integrato come parte del prompt. Sarà molto più veloce per i tavoli di grandi dimensioni.
Prova l'esempio seguente in JMP 10 (sembra non funzionare come in JMP 9). La selezione e il subsetting sono quasi istantanei per una tabella da 1 milione di righe (MacPro 8x2,8 GHz).
//Tabella di esempio
dt = Nuova Tavola ( "Grande" ,
aggiungere righe ( 1000000 ) ,
Nuova Colonna ( "trimestre" , nominale , formula ( 1 + 10 * Girare ( Uniforme casuale () / 3 , 1 ) ) )
) ;
dt << runformulas () ;
Colonna ( "trimestre" ) << eliminare la formula ;
//Richiesta
df = dt << datafilter ( Colonne ( : trimestre ) ) ;
rdf = df << rapporto ;
rdf [ Casella di contorno ( 1 )] << imposta il titolo ( "Seleziona uno o più trimestri" ) << aggiungere (
Scatola dei bottoni ( "Crea sottoinsieme" ,
dt << Sottoinsieme ( Nome tabella di output ( "Età scelte" ) ) ;
df << vicino , nw << vicino
)
) ;
//personalizzazione opzionale: rdf[listbox(4)]<Re: Errore durante la richiesta
Grazie a entrambi per i consigli davvero buoni, lo apprezzo! Il codice ora funziona bene, ma è un po' lento quando si utilizzano 1,5 milioni di righe.
Re: Errore durante la richiestaSì, la funzione Contains() è più elegante qui. Ma ottengo un errore se seleziono solo un elemento nell'esempio precedente. Probabilmente perché alist_num [ seleziona1 << ottenere indici selezionati ] quindi restituisce un numero invece di un elenco di numeri.
Qui
dt << Seleziona Dove ( contiene ( seleziona1 << fatti selezionare , carattere( : età) ) ) ;
funziona meglio e dovrebbe funzionare indipendentemente dal fatto che :age sia carattere o numerico.
Re: Errore durante la richiestaC'è un comodo costrutto per cercare una colonna usando un elenco con il contiene funzione.Il codice seguente mostra come usarlo:
dt = aprire ( "$dati_campione\big class.jmp" ) ;
Riassumere ( age_list = Di ( Colonna ( dt , "età" ) ) ) ;
alist_num = {} ;
per ( io = 1 , io <= articoli ( age_list ) , io ++,
alist_num [ io ] = num ( age_list [ io ]) ;
) ;
nw = Nuova finestra ( "Scegli età" ,
hb = Scatola del pannello ( "Scegli età" ,
seleziona1 = Casella di riepilogo (
age_list ,
dt << Seleziona Dove ( contiene ( alist_num [ seleziona1 << ottenere indici selezionati ] , : età ) ) ;
selRows = dt << Ottieni righe selezionate ;
)
) ,
Scatola dei bottoni ( "OK" ,
dt << Seleziona Dove ( contiene ( alist_num [ seleziona1 << ottenere indici selezionati ] , : età ) ) ;
/* Le righe selezionate vengono suddivise in una nuova tabella. */
dt << Sottoinsieme ( Nome tabella di output ( "Età scelte" ) ) ;
nw << Chiudi la finestra ;
)
) ;
Re: Errore durante la richiestaIl confronto
: annom == quarter_list [ seleziona1 << Ottenere ]
non funziona per più di un valore perché verifica l'uguaglianza di un valore di cella e di un elenco. Restituirà sempre false (non credo che le celle possano contenere elenchi).
Ci sono diversi modi per farlo. Ecco un suggerimento (per lo script del pulsante OK) in cui la selezione delle righe si basa su una matrice di numeri di riga ottenuta scorrendo l'elenco degli elementi selezionati.
Scatola dei bottoni ( "OK" ,
righe = [] ;
l = quarter_list [ seleziona1 << Ottieni indici selezionati ] ;
Per ( io = 1 , io <= N articoli ( l ) , io ++,
righe = righe || ( dt << ottenere righe dove ( : annom == l [ io ] ))
) ;
/* Le righe selezionate vengono suddivise in una nuova tabella. */
dt << Sottoinsieme ( Righe(righe), Nome tabella di output ( "Quartieri scelti" ) ) ;
nw << Chiudi la finestra ;
)
Re: Errore durante la richiestaGrazie, ora funziona bene quando seleziono solo un valore della variabile, cosa devo fare quando voglio selezionare ad esempio tre valori della variabile per i nuovi dati premendo Shitf?
Re: Errore durante la richiestaIl contenuto delle parentesi quadre quando utilizzato come indice di una lista deve essere un numero (o una lista di numeri). Prova invece
quarter_list [ seleziona1 << Ottieni indici selezionati ]
Re: Errore durante la richiestaGrazie per i consigli.
Si lamenta ancora di quei [select1 << get] punti.
Quella variabile yearm è una variabile carattere e non ha aiutato anche se ho creato yearm come variabile numerica.
"pedice non valido (deve essere un numero o un elenco di numeri){1} nell'accesso o nella valutazione di 'Subscript' , quarter_list[select1 << get]"
Re: Errore durante la richiestaNon userei quarter come variabile, poiché è anche una funzione JMP.Forse quarter_list?Prova anche a inserire l'istruzione di chiusura della finestra per ultima.Annulla il test del codice:
Riassumere ( quarter_list = Di ( Colonna ( dt , "anno" ) ) ) ;
nw = Nuova finestra ( "Scegli quarti" ,
hb = Scatola del pannello ( "Scegli anno" ,
seleziona1 = Casella di riepilogo (
quarter_list ,
dt << Seleziona Dove ( : annom == quarter_list [ seleziona1 << Ottenere ] ) ;
selRows = dt << Ottieni righe selezionate ;
)
) ,
Scatola dei bottoni ( "OK" ,
dt << Seleziona Dove ( : annom == quarter_list [ seleziona1 << Ottenere ] ) ;
/* Le righe selezionate vengono suddivise in una nuova tabella. */
dt << Sottoinsieme ( Nome tabella di output ( "Quartieri scelti" ) ) ;
nw << Chiudi la finestra ;
)
) ;