¿Cómo codifico buscar y reemplazar en JSL, para eliminar texto de una columna y convertir a formato de número?Hola comunidad JMP,
Una vez a la semana, importo datos .txt con una columna de voltaje de la batería (llamada "V1") donde los valores de fila pueden ser "3,45 V", "3,34 V", "3,12 V", "3,23 V", etc. Uso Buscar y reemplazar manualmente para eliminar la letra "V" de los datos, luego cambio manualmente el tipo de datos de Carácter a Numérico. Supongo que no entiendo muy bien cómo incluir replace() o mugger() en mis scripts porque he intentado y no he podido crear un JSL que funcione para esta tarea simple.
Re: ¿Cómo codifico buscar y reemplazar en JSL, para eliminar texto de una columna y convertir a formato de número?Encontré un error lógico en mi código.A continuación se muestra una tabla de datos de ejemplo con un pequeño script que convierte los valores en su lugar.
Names Default To Here( 1 );
dt = New Table( "Example",
add rows( 100 ),
New Column( "col1", character, formula( Char( Random Integer( 78, 100 ) ) || "V" ) ),
New Column( "col2", character, formula( Char( Random Integer( 78, 100 ) ) || "V" ) )
);
dt<<RUN formulas=""></RUN>
Re: ¿Cómo codifico buscar y reemplazar en JSL, para eliminar texto de una columna y convertir a formato de número?Hola Jim, tu código no funcionó del todo y no pude entender por qué. Cargué una captura de pantalla del depurador de JMP con el mensaje de error y un subconjunto de mis datos si desea continuar abordando esto. ¡Estaría muy interesado en esta solución alternativa!

Re: ¿Cómo codifico buscar y reemplazar en JSL, para eliminar texto de una columna y convertir a formato de número?Gracias, Dan,
Pude encajar esto en mi flujo de trabajo como:
Names Default To Here( 1 );
:Name( "V1" ) << Set Name( "orig V1" );
New Column( "V1",
Numeric,
"Continuous",
Format( "Fixed Dec", 6, 2 ),
Formula( Num( Word( 1, :orig V1, "V" ) ) )
);
¡Agradezco la respuesta rápida!
Re: ¿Cómo codifico buscar y reemplazar en JSL, para eliminar texto de una columna y convertir a formato de número?Vea si algo como esto funcionará... no ha sido completamente probado, pero debería estar cerca de funcionar
Names Default To Here( 1 );
dt = Current Data Table();
colNames = dt << get column names( string, character );
For( theCol = 1, thecol <= N Items( colNames ), theCol++,
For( theRow = 1, theRow <= N Rows( dt ), theRow++,
If( Right( Column( dt, theCol )[theRow], 1 ) == "V",
Column( dt, theCol )[theRow] = Substr(
Column( dt, theCol )[theRow],
1,
Length( Column( dt, theCol )[theRow] ) - 1
)
)
)
);
If( Is Missing( Num( Column( dt, theCol )[1] ) ) == 0,
Column( dt, theCol ) << data type( numeric ) << modeling type( continuous )
);Re: ¿Cómo codifico buscar y reemplazar en JSL, para eliminar texto de una columna y convertir a formato de número?Siempre he sido un gran admirador de producir la solución primero de forma interactiva y luego mediante un script. Sé que no siempre es posible, pero puedes acercarte.
Al abrir el archivo de texto, aparece este script (para mi ejemplo, por supuesto) que se encuentra en el script de origen con la tabla JMP:
Open(
"C:\Testing.txt",
columns( New Column( "V1", Character, "Nominal" ) ),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
)
Puede modificar según sea necesario para su caso específico.
Ahora, para eliminar la V y convertirla en numérica, crearía una segunda columna para eso. Esto permite la verificación de errores en caso de que el formato de voltaje cambie, por alguna razón. Además, ofrece una mejor trazabilidad de los datos. Creé una columna con esta fórmula: Num (Palabra (1,: V1, "V")). Luego miré el "Script de copia de tabla" que se encuentra en el panel de la tabla y saqué la parte relacionada del script para crear la nueva columna.
En JSL eso sería:
New Column( "Numeric V1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Num( Word( 1, :V1, "V" ) ) )
)
Poner los dos juntos debe ser su guión.