Creazione di un totale parziale di una colonna<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Mi chiedo come creare una colonna in una tabella JMP che sia il totale parziale di un'altra colonna (a cui potrei aver bisogno di fare riferimento tramite il nome della colonna come stringa). Cioè, se ho una colonna con i seguenti dati:
1
2
3
4
5
Vorrei creare una colonna con una formula il cui contenuto funzionerebbe
1
3
6
10
15
Attualmente ho questo ciclo, lavorando da un elenco di nomi di colonne per prendere il totale parziale di:
For(i = 2, i <= numCols, i++,
colName = colNames ;
col = Nuova colonna("Cumulativo " || nomecol,
Formula(Sommazione(j = 1, Riga(), As Colonna(NomeCol)))
);
);
Sembra funzionare, ma è molto lento e se creo più colonne, in qualche modo finiscono tutte con gli stessi dati. Qual è il modo migliore per farlo?
Oggetto: Creazione di un totale parziale di una colonnaA proposito, se l'elenco di colNames contiene nomi invece di stringhe, questo approccio sembra dare lo stesso risultato della stringa analizzata:
colNames = dt << ottenere i nomi delle colonne ( ) ; // Senza l'opzione "stringa"!
numCol = N articoli ( colNames ) ;
Per ( io = 1 , io <= numCol , io ++,
colNome = colNames [ io ] ;
nuovo nome = "Cumulativo" || ( colNome << ottenere nome ) ;
col = Nuova Colonna ( nuovo nome , Numerico , Continuo ,
Formula ( Valutazione ( Sostituire (
Espr ( Somma ( J = 1 , Riga () , xxx [ J ])) ,
Espr ( xxx ) , colNames [ io ]
)))
) ;
) ;
Oggetto: Creazione di un totale parziale di una colonnaSì, dovrebbe funzionare finché le colonne non vengono mai rinominate.
Questo codice illustra la differenza tra i due approcci. Il brutto metodo delle stringhe codifica la formula in una colonna specifica. Il secondo metodo cerca una colonna con un nome specifico (che potrebbe essere utile)
// Tabella di esempio
dt = Nuova Tavola ( "Test" ,
Aggiungi righe ( 4 ) ,
Nuova Colonna ( "Col1" , Numerico , Imposta valori ( [ 1 , 2 , 3 , 4 ] ) )
) ;
// Aggiungi formula per stringa analizzata
colNames = dt << ottenere i nomi delle colonne ( corda ) ;
numCol = N articoli ( colNames ) ;
Per ( io = 1 , io <= numCol , io ++,
colNome = colNames [ io ] ;
col = Nuova Colonna ( "Cumulativo" || colNome , Numerico ) ;
Valutazione (
Analizza (
Inserisci valutazione (
"col<< Imposta Formula(Somma(j = 1, riga(), ^(NomeCol)^))"
)
)
) ;
) ;
// Aggiungi la formula sostituendo l'espressione
Per ( io = 1 , io <= numCol , io ++,
colNome = colNames [ io ] ;
nuovo nome = "Cumulativo" || colNome ;
col = Nuova Colonna ( nuovo nome ,
Numerico ,
Continuo ,
Formula (
Valutazione (
Sostituire (
Espr (
Somma ( J = 1 , Riga () , Come Colonna ( xxx )[ J ] )
) ,
Espr ( xxx ) , colNome
)
)
)
) ;
) ;
Aspettare ( 1 ) ;
// Cambia il nome della colonna e un valore e guarda come funzionano le formule
Colonna ( 1 ) << imposta nome ( "Nuovo nome" ) ;
Colonna ( 1 )[ 1 ] = 100 ;
Aspettare ( 2 ) ;
// Aggiunge una nuova colonna con lo stesso nome della colonna originale.
dt << Nuova Colonna ( "Col1" , numerico , valori ( [ 1 , 1 , 1 , 1 ] ) ) ;
dt << ripetere le formule ;
Oggetto: Creazione di un totale parziale di una colonnaSento che se c'è un modo per fare in modo che JSL faccia quello che vuoi analizzando una stringa, allora dovrebbe esserci un modo per farlo senza usare la funzione Parse, con un semplice codice JSL (che, dopotutto, è solo una stringa) . Questo è ciò che ho avuto modo di lavorare usando Substitute:
For(i = 2, i <= numCols, i++,
colName = colNames ;
newName = "Cumulativo " || colNome;
col = Nuova colonna(nuovoNome, Numerico, Continuo,
Formula(Eval(Sostituisci(
Espr(Sommazione(j = 1, Riga(), As Colonna(xxx))),
Espr(xxx), colNome
)))
);
);
Oggetto: Creazione di un totale parziale di una colonnaFormula() non valuta il suo argomento, quindi tutte le formule di colonna conterranno le variabili ColName e J e si aggiorneranno man mano che il ciclo procede.
Ecco un modo per aggirare questo problema:
Per ( io = 2 , io <= numCol , io ++,
colNome = colNames [ io ] ;
col = Nuova Colonna ( "Cumulativo" || colNome , Numerico ) ;
Valutazione (
Analizza (
Inserisci valutazione (
"col<< Imposta Formula(Somma(j = 1, riga(), ^(NomeCol)^))"
)
)
) ;
) ;