En un bucle cómo indicar otra columna que [I]Hola.
De nuevo tengo que pedir ayuda. He escrito un script que calcula el porcentaje de cambio entre los valores de una columna numérica y la siguiente. Desafortunadamente me sale un error: "Columna 1897_Canvi Formula interrumpida
No se puede convertir el argumento en un número [o matriz] 1 veces En las filas: {1} Operación: Restar, numéricoColNames [X] - numericColNames [i]
Los errores de evaluación de la fórmula han sido ignorados "
Estos son los nombres de código numéricos:
{"_1842 _", "_ 1877_", "_1887_", "_1897_", "_1900_", "_1910_", "_1920_", "_1930_", "_1940 _", "_ 1950_", "_1960_", " _1970_ "," _1981_ "," _1991_ "," _2001_ "," _2011_ "," _2018_ "}
Este es el script en cuestión:
Names Default To Here( 1 );
dt = Current Data Table();
numericColNames = dt << get column names( string, numeric );
For( i = 2, i <= N Items( numericColNames ), i++,
Eval(
Substitute(
Expr(
New Column( Char( numericColNames[i] ) || "_Canvi",
Numeric,
Continuous,
Format( "Percent", 12, 1 ),
X = i - 1,
Formula( (numericColNames[X] - numericColNames[i]) / numericColNames[X] )
)
),
Expr( __col__ ), Parse( ":Name (\!" " || numericColNames[i] || "\!")" )
)
)
);Re: En un bucle cómo indicar otra columna que [I]No está configurando la función Substitute () correctamente.
Sustituir y sustituir en
La función Substitute () devuelve una copia de una cadena con una expresión de reemplazo. los
Sustituir la función Into () cambia la cadena original con una expresión de reemplazo.
Por ejemplo, considere la siguiente secuencia de comandos:
str1 = str2 = "All things considered";
str3 = Substitute( str1, "All", "Some" );
// str3 holds the result of the Substitute, and str1 is not changed
str4 = Substitute Into( str2, "All", "Some" );
// Substitute Into returns nothing, so str4 is missing, and str2 is changed
// and now holds the result of Substitute Into
Show( str1, str2, str3, str4 );
Este script devuelve el siguiente resultado:
str1 = "Todas las cosas consideradas";
str2 = "Algunas cosas consideradas";
str3 = "Algunas cosas consideradas";
str4 =.;
He reelaborado tu guión, a lo que supongo que será lo que quieres
Names Default To Here( 1 );
dt = Current Data Table();
numericColNames = dt << get column names( string, numeric );
For( i = 2, i <= N Items( numericColNames ), i++,
Eval(
Substitute(
Expr(
New Column( Char( numericColNames[i] ) || "_Canvi",
Numeric,
Continuous,
Format( "Percent", 12, 1 ),
X = i - 1,
Formula( (__colX__ - __coli__ / __colX__ )
)
),
Expr( __coli__ ), Parse( ":Name (\!" " || numericColNames[i] || "\!")" ),
Expr( __colX__ ), Parse( ":Name (\!" " || numericColNames[X] || "\!")" )
)
)
);
La documentación de la función Substitute () se copió de la Guía de scripting
Ayuda ==> Libros ==> Guía de scripting
Re: En un bucle cómo indicar otra columna que [I]En primer lugar, gracias por su ayuda. Cuando ejecuto tu script me sale el error:
En el siguiente script, error marcado por / * ### * /
Sustituir / * ### * / (Expr (...
Esta parte del guión fue sugerida en una publicación anterior ya que el nombre de las columnas eran números enteros como el de 1980. El sustituto podría eliminarse si en lugar de 1980 era "_1980_".
¿Qué hacen los operadores "\!" después de ": Nombre".
Gracias de nuevo por tus enseñanzas.
Re: En un bucle cómo indicar otra columna que [I]El nombre de la columna de 1980 causa un problema que se corrige al colocar un: Nombre ("1980") alrededor de la especificación de la columna. No es por eso que se usa la función Substitute (). La función Sustituir () está allí porque no desea que la fórmula que se guarda para la columna tenga el valor
(numericColNames[X] - numericColNames[i]) / numericColNames[X] )
sino más bien tener el valor
( __1980__ - __1960__ / __1980__ )
Si la fórmula tiene la primera sintaxis que especifiqué, significará que la fórmula fallará tan pronto como su sesión JMP cambie cualquiera de los valores para: i, X, numericColNames. En otras palabras, si guarda su tabla de datos, finaliza su sesión JMP y luego vuelve a iniciar JMP, ninguna de las variables i, X o NúmerosColún numéricos estará en su nueva sesión JMP, de modo que cuando abra la tabla de datos, todos de las columnas que tienen fórmulas que hacen referencia a esas variables fallarán.
Por último, no estoy seguro de cuál es el problema que está encontrando actualmente. Si pudiera proporcionar una muestra de sus datos, al menos tendré la oportunidad de resolver el problema.
Re: En un bucle cómo indicar otra columna que [I]Hola de nuevo. Lo que pretendo es calcular el porcentaje de cambio en el número de habitantes en los censos sucesivos que se han realizado en los municipios de la provincia de Teruel (España) a lo largo del tiempo. Mi intención es comparar un censo con el siguiente censo. En la primera columna de la tabla de datos que encierro (parcial) se registran los nombres de los municipios, en los siguientes seis los habitantes de cada municipio aparecen en los diferentes censos. Para calcular la tasa de cambio, calculo la diferencia entre un censo y el siguiente, el resultado se divide por el primer censo y luego expreso el valor obtenido como un porcentaje. es decir (_1842_ - _1877_) / _1842_
