Iniciar actualización de datosHola
Tengo una tabla y me gustaría que el volumen vacío se actualice a 0

He escrito el script para actualizar la columna "19-04-2024"
el problema es que el nombre de la columna se puede cambiar y prefiero usar la columna (3) o la columna (4)
pero no funciona.
¿Puedes corregir el guión?
dt << Iniciar actualización de datos;
dt << Recodificar columna (
dt << Columna (3),
{Valor del mapa (_rcOrig, {., 0}, No coincidente (_rcNow))},
Actualizar propiedades (1),
Columna de destino (Columna (3)));
dt << Finalizar actualización de datos;
Automatización y secuencias de comandosventanasRe: Iniciar actualización de datosAsColumn parece funcionar aquí
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[1::10, 4] = .;
dt << Recode Column(
AsColumn(dt, 4),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(AsColumn(dt, 4))
);
Este es un caso simple en el que lo más probable es que use subíndices de tablas de datos. Subíndices de tablas de datos
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[1::10, 4] = .;
missing_rows = Loc(dt[0, 4], .);
dt[missing_rows, 4] = 0;
Re: Iniciar actualización de datoses algo malo
Intenté usar el script simple para cambiar el volumen vacío a 0 en la columna "19-04-2024"
dt[1::10, 3] = .;
filas_faltantes = Loc(dt[0, 3],.);
dt[filas_faltantes, 3] = 0;

pero veo que el script cambia no solo el valor vacío a 0, el script cambia un 14,3% y un 21,3% a 0 también

De hecho, mi script funciona bien, pero no sé cómo puedo cambiar dt: "19-04-2024" a "columna 3".
dt << Iniciar actualización de datos;
dt << Recodificar columna (dt :"19-04-2024",
{Valor del mapa (_rcOrig, {., 0}, No coincidente (_rcNow))},
Actualizar propiedades (1),
Columna de destino( :"19-04-2024" ) );
dt << Finalizar actualización de datos;
Re: Iniciar actualización de datosEsta parte
dt[1::10, 4] = .;
estaba allí simplemente para agregar algunos valores faltantes con fines de demostración (primeras diez filas de la columna 4) para que pueda eliminarlos.
Re: Iniciar actualización de datossi, la línea de comando
dt[1::10, 3] = .;
establezca todos los valores en las filas 1 a 10 en esa tercera columna para que estén vacíos. El resto del script reemplazó los valores vacíos con 0. Entonces, como explicó @jthi , simplemente elimine la línea.
Re: Iniciar actualización de datosHay 2 o 3 trucos para solucionar estos problemas:
- Nombre Expr(Como columna(...))
- Evaluación(Sustituto(Expr(),... , ...)))
- si hay un tercero, se puede encontrar aquí: Manejo de expresiones en JMP: Tipps and Trapdoors
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
my col = Name Expr( As Column( dt, 2 ) );
Eval(
Substitute(
Expr(
dt << Recode Column(
_col_,
{Map Value( _rcOrig, {14, 0}, Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( _col_ )
)
),
Expr( _col_ ), Name Expr( my col )
)
);
Re: Iniciar actualización de datosHola
Si entendí bien tu sugerencia es cambiar: "19-04-2024" a tu script .
pero recibí el error. ¿Puedes comprobar dónde me equivoqué?
dt << Iniciar actualización de datos;
dt << Recodificar columna (dt
( mi col = Nombre Expr( Como columna( Columna( dt, 3 ) ) );
Eval( Sustituir( Expr( dt << Recodificar columna( _col_,
{Valor del mapa (_rcOrig, {14, 0}, inigualable (_rcNow))},
Actualizar propiedades (1),
Columna de destino (_col_))),
Expr( _col_ ), Nombre Expr( mi col ))) ),
{Valor del mapa (_rcOrig, {., 0}, No coincidente (_rcNow))},
Actualizar propiedades (1),
Columna de destino( :"19-04-2024" ) );
dt << Finalizar actualización de datos;
Re: Iniciar actualización de datosLa idea es:
obtenga un módulo que pueda usarse de manera flexible, el identificador es mi col:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
my col = Name Expr( As Column( XXX) );
Eval(
Substitute(
Expr(
dt << Recode Column(
_col_,
{Map Value( _rcOrig, {14, 0}, Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( _col_ )
)
),
Expr( _col_ ), Name Expr( my col )
)
);donde As Column(XXX) se puede reemplazar por
- Como columna (columna ("sexo"))
- Como columna(dt, "sexo")
- Como columna ("sexo")
- Como columna(3)
- Como columna(dt, 3)
- en tu caso:
Como columna(dt, "19-04-2024")
o simplemente como columna ("19-04-2024")
editar:
como muestra Jarmo en alguna publicación anterior: https://community.jmp.com/t5/Discussions/Begin-Data-Update/mp/752334/highlight/true#M93383 , para Recode Column , en realidad
- ni siquiera se necesita Eval(Substitute(...))
- ni el Nombre Expr(As Column(xxx))
... Recodificar la columna (AsColumn(xxx)...) es suficiente.
¡Guau!
Re: Iniciar actualización de datosSólo deberías necesitar esta parte
dt << Recode Column(
AsColumn(dt, 4),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(AsColumn(dt, 4))
);
donde define el índice de su columna dentro de AsColumn.
Si tengo una mesa como esta

y deseo reemplazar los valores faltantes del índice de columna 1 y 3, usaría
dt << Recode Column(
As Column(dt, 1),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(As Column(dt, 1))
);
y
dt << Recode Column(
As Column(dt, 3),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(As Column(dt, 3))
);
(el número dentro de la columna As ha cambiado)

Re: Iniciar actualización de datos
dt = Open("$SAMPLE_DATA/Big Class.jmp"); <BR />dt << Recode Column(
/*Print(.);*/AsColumn(dt, Print(1);2),
Print(2);{Print(3);Map Value(_rcOrig, {12, Print(4);0}, Unmatched(_rcNow))},
/*Print(0);*/Update Properties(Print(5);1),
/*Print(0);*/Target Column(/*Print(.);*/AsColumn(dt, Print(6);4))
);da
2
5
6
1
1
3
3
3
3
3
3
1
:height
- Print(0) : no se espera ningún comando aquí → mensaje de error → /* Los puse en comentarios */
- Imprimir 2 : se evalúa el segundo argumento; la lista permanece como está (la lista no se evalúa)
- Print(5) & Print (6) → se evalúan los argumentos de los argumentos nombrados
- Print(1) : ahora se evalúa el primer argumento: ¿por qué dos veces?
- Imprimir(3) : 6 veces (!) (independiente de los valores a reemplazar)
- Imprimir(1) : ¿otra vez?
- [Imprimir(.) : se evalúan, pero impiden que Jmp obtenga correctamente la información de la columna → /* Las pongo en comentarios */]
- Print(4) : no aparece → no se espera aquí → error → los valores se reemplazan por "." (en lugar de 0)
- :altura : valor de retorno: columna de destino
Re: Iniciar actualización de datos(A) En
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[1,"age"]=4;
row()=1;
AsColumn(dt, tmp=As Column(2);print(tmp);tmp /*=4*/); // column #4 , row #1= 59<BR />Sum(As Column(2) ,7) // 4 + 7 = 11<BR />El resultado de As Column(2) no es la columna n.° 2, es el valor de la columna n.° 2 (en la fila n.° 1).
(B) Por otro lado, el primer argumento de Recode Column() solo se evalúa hasta un nivel en el que As Column() devuelve la referencia de la columna.
... y NO el valor de la fila actual (como en el primer ejemplo).
Lo mismo ocurre con el argumento del argumento Columna de destino() .
@joseph_morgan habla en Uso de JSL para desarrollar aplicaciones robustas y eficientes sobre expresiones que se "evalúan dos veces"
= (A)
si se evita este "estándar" (B), se siente como magia:)
Re: Iniciar actualización de datosEntonces, con respecto al resaltado de sintaxis avanzado en el Editor JSL, ¿la función evalúa su argumento? ¿Quizás necesitemos un tercer color?
Re: Comenzar actualización de datosHola
Intenté cambiar dt :"19-04-2024" a dt [1::10, 4], pero no cambia el volumen vacío a 0
¿Puedes comprobar dónde me equivoqué?
dt << Iniciar actualización de datos;
dt << Recodificar columna ( dt [1::10, 4] ,
{Valor del mapa( _rcOrig, {., 0}, No coincidente( _rcNow ) )},
Actualizar propiedades( 1 ),
Columna de destino ( dt [1::10, 4] ) );
dt << Fin de actualización de datos;