Come impostare una formula su più colonne in modo elegante<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao ragazzi,
Qualcuno può aiutarmi con la domanda qui sotto?
Vorrei evitare la formula lunga come di seguito: (ogni elemento è il nome di una colonna!)
Column("Std")<
Formula(
Std Dev(
:F23 m A,:F23 m C,:F23 m H,:F23 MA,:F23 MC,:F23 MH,:F23 NA,:F23 NC,:F23 NH,
:F30 m A,:F30 m C,:F30 m H,:F30 MA,:F30 MC,:F30 MH,:F30 NA,:F30 NC,:F30 NH,
:F36 m A,:F36 m C,:F36 m H,:F36 MA,:F36 MC,:F36 MH,:F36 NA,:F36 NC,:F36 NH,
:F37 m A,:F37 m C,:F37 m H,:F37 MA,:F37 MC,:F37 MH,:F37 NA,:F37 NC, :F37 NH,
:F49 m A,:F49 m C,:F49 m H,:F49 MA,:F49 MC,:F49 MH,:F49 NA,:F49 NC, :F49 NH,
:F53 m A,:F53 m C,:F53 m H,:F53 MA,:F53 MC,:F53 MH,:F53 NA,:F53 NC, :F53 NH,
:F87 m A,:F87 m C,:F87 m H,:F87 MA,:F87 MC,:F87 MH,:F87 NA,:F87 NC, :F87 NH ) ) );
Saluti,
Dan
Re: Come impostare una formula su più colonne in modo eleganteEntrambe le soluzioni precedenti funzioneranno, ma tieni presente che per la soluzione di Ron la formula potrebbe funzionare solo fino alla variabile globale colnames viene ridefinito o cancellato, ad esempio quando la sessione JMP viene chiusa.
Ecco del codice che confronta i due approcci:
dt = Aprire ( "$SAMPLE_DATA/Big Class.jmp" ) ;
colnames = dt << ottenere i nomi delle colonne ;
// L'approccio di Ron: variabili nella formula non valutate
dt << Nuova colonna ( "Std" , Formula ( St. Dev ( colnames [ 4 :: 5 ]))) ;
// L'approccio di Ian: variabili valutate prima di impostare la formula
formula = Eval Espr ( St. Dev ( espr ( colnames [ 4 :: 5 ]))) ;
dt << Nuova colonna ( "Std2" , Formula ( Nome Espr ( Formula ))) ;
// Confronta le formule nel registro
Stampa ( : Std << ottieni la formula , Std2 << ottieni la formula ) ;
//Cancella le definizioni delle variabili e aggiungi righe. Solo Std2 riconoscerà le modifiche
Cancella globali () ;
Tabella dati corrente () << concatenare (
Aprire ( "$DATI CAMPIONE/Studenti2.jmp" ) ,
aggiungi alla prima tabella
) ;
Re: Come impostare una formula su più colonne in modo eleganteCiao umido77 ,
Ian@JMP la soluzione è corretta. Tuttavia, se stai cercando qualcosa di meno rigoroso, puoi provare quanto segue.
supponendo che le colonne necessarie per la formula siano tutte insieme in un intervallo, puoi introdurre il numero della prima e dell'ultima come segue:
dt = Aprire ( "$SAMPLE_DATA/Big Class.jmp" ) ;
colnames = dt << ottenere i nomi delle colonne ;
col = dt << nuova colonna ( "Std" ) ;
col << Imposta formula ( std dev ( colnames [ 4 :: 5 ] )) ;
migliore,
ron
Re: Come impostare una formula su più colonne in modo eleganteQuesto codice "evita" nel senso che utilizza le colonne attualmente selezionate in modo da non dover digitare. È quello che stai cercando, per favore?
Esegui 'File > Nuovo > Nuovo script', taglia e incolla il JSL, quindi fai 'Modifica > Esegui script'.
NomiDefaultToHere ( 1 ) ;
// Crea un tavolo
nc = 30 ;
dt = Nuova tabella ( "Test" ) ;
per ( c = 1 , c <= nc , c ++,
dt << Nuova colonna ( "Col" || Char ( c ) , Numerico , Continuo , Formula ( CasualeNormale ())) ;
) ;
dt << Aggiungi righe ( 100 ) ;
// Seleziona metà delle colonne
n = Girare ( nc / 2 ) ;
c = Indice casuale ( NCol ( dt ) , n ) ;
per ( io = 1 , io <= n , io ++,
Colonna ( dt , c [ io ]) << setSelected ( 1 ) ;
) ;
// Esegui questo codice per creare una nuova colonna formula per la deviazione standard delle colonne attualmente selezionate in una tabella
selCols = dt << getSelectedColumns ;
addCol = espr ( dt << Nuova colonna ( "StdDev" , Numerico , Continuo , Formula ( StdDev ( colsTBD )))) ;
SostituisciInto ( addCol , espr ( colsTBD ) , val ( selCols )) ;
addCol ;