Voglio aggiungere una nuova colonna di serie con una formula B2/A2, C2/A2... come nell'esempio seguente
come implementarlo
Grazie

colname = dt << get column names( string, continuous );
nc = N Items( colname );
For( p = 1, p < nc, p++,
For( i = 1, i < nc, i++,
a = "Bin" || Char( p );
b = Char( a ) || Char( "(%)" );
If( Contains( colname[i], a ),
dt << New Column( b, formula( :colname[i] / :name( "Total" ) ) )
);
)
);
Nel caso in cui ci siano caratteri speciali nel nome della colonna, puoi usare Parse( "As Column \!"" || colname[i] || "\!"" ) nella sostituzione.Il post originale ha cercato di utilizzare Name(), che è difficile da usare negli script in quanto accetta solo una stringa tra virgolette.
Bello. Mi piace il mix'n'match di manipolazione dell'espressione e manipolazione del personaggio alla fine!
1 Eval(
2 Substitute(
3 Expr(
4 dt << New Column( colname[i] || "%",format("Percent",7,2),
5 formula( __col__ / :name( "Total" ) ) )
6 ),
7 Expr( __col__ ),
8 Parse( ":" || colname[i] )
9 )
10 )</CODE>Le righe 4 e 5 sono il JSL che viene manipolato come espressione; il __col__ è un segnaposto.</P><P>Le linee 3 e 6 sono<EM> citando</EM> l'espressione in modo che non tenti di funzionare.</P><P>La riga 7 identifica anche il bit da sostituire<EM> citato</EM> quindi non viene eseguito.</P><P>La riga 8 è il valore sostitutivo. Questo è interessante perché in realtà crea alcuni JSL come una concatenazione di due stringhe, quindi lo analizza in un'espressione. Il risultato della funzione di analisi è un'espressione.</P><P>Le linee 2 e 9 sono le<EM> Sostituto (fonte, modello, sostituzione)</EM> funzione. Restituisce un'espressione creata dai tre argomenti dell'espressione.</P><P>Le righe 1 e 10 valutano l'espressione.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-284389" slang="en-US">Re: come aggiungere una nuova colonna in una riga con un ciclo for</LINGO-SUB><LINGO-BODY id="lingo-body-284389" slang="en-US"><P>Stavi rendendo la questione più complessa del necessario.Di seguito è riportata una rielaborazione del codice, con un po' di annotazione</P>
<PRE><CODE class=" language-jsl">Names Default To Here( 1 ); // This line tells JMP to isolate the variable used to this script
// Set a variable to point to the current active data table
dt = Current Data Table();
// Get the column names
colname = dt << get column names( string, continuous );
// Determine the number of columns to loop through
nc = N Items( colname );
// Loop across all of the columns in the colname list
// Your original code was For( i = 1, i < nc, i++,
// with "i < nc" the last colname would not be processed
For( i = 1, i <= nc, i++,
// If this is a column name that starts with "Bin"
// a new % column needs to be added
If( Left( colname[i], 3 ) == "Bin",
// Create the new column
Eval(
Substitute(
Expr(
dt << New Column( colname[i] || "%",format("Percent",7,2),
formula( __col__ / :name( "Total" ) ) )
),
Expr( __col__ ), Parse( ":" || colname[i] )
)
)
)
);