quiero agregar una nueva columna de serie con una fórmula B2/A2, C2/A2... como el siguiente ejemplo
como lo implemento
Gracias

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" ) ) )
);
)
);
En caso de que haya caracteres especiales en el nombre de la columna, puede usar Parse( "As Column \!"" || colname[i] || "\!"" ) en la sustitución.La publicación original intentó usar Name(), que es difícil de usar en scripts ya que solo acepta una cadena entre comillas.
Agradable. ¡Me gusta la combinación de manipulación de expresiones y manipulación de personajes al final!
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>Las líneas 4 y 5 son el JSL que se manipula como una expresión; el __col__ es un marcador de posición.</P><P>Las líneas 3 y 6 son<EM> citando</EM> la expresión para que no intente ejecutarse.</P><P>La línea 7 identifica el bit a ser reemplazado, también<EM> citado</EM> por lo que no se ejecuta.</P><P>La línea 8 es el valor de reemplazo. Esto es interesante porque en realidad crea algo de JSL como una concatenación de dos cadenas y luego lo analiza en una expresión. El resultado de la función de análisis es una expresión.</P><P>Las líneas 2 y 9 son las<EM> Sustituto (fuente, patrón, reemplazo)</EM> función. Devuelve una expresión construida a partir de los tres argumentos de expresión.</P><P>Las líneas 1 y 10 evalúan la expresión.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-284389" slang="en-US">Re: cómo agregar una nueva columna en una fila con un bucle for</LINGO-SUB><LINGO-BODY id="lingo-body-284389" slang="en-US"><P>Estabas haciendo el problema más complejo de lo que debe ser.A continuación se muestra una revisión de su código, con un poco de anotación</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] )
)
)
)
);