Recodificar columnas que contienen un valor de carácter al final de una columnaHola,
tengo una mesa como
| IDENTIFICACIÓN | Columna2 |
| ABC001235G | |
| ABC001234 | |
| ABC001235 | |
| ABC001234D | |
| ABC001234F | |
Me gustaría recodificar la columna ID de modo que todos mis valores como 'ABC001234D' y 'ABC001234F' se conviertan en 'ABC001234'; básicamente, quiero eliminar esa última letra en la declaración. Sin embargo, no puedo hacer esto mediante un proceso manual. Hay demasiadas filas por hacer y no podría escribirlas manualmente para cada ID que se pueda usar en el script. Buscando una manera de hacer esto mediante secuencias de comandos. ¡Gracias!
Modelado estadístico avanzadoAutomatización y secuencias de comandosCombinación y limpieza de datosLa personalización en masaRe: Recodificar columnas que contienen un valor de carácter al final de una columnaPara esto usaría expresiones regulares. Me gustó esto en un momento para comenzar con expresiones regulares al menos en algún nivel: regexona también echa un vistazo Funciones de caracteres JMP: expresiones regulares y Regex del índice de secuencias de comandos.
A continuación se muestra un ejemplo con dos formas posibles de eliminar caracteres finales usando Regex en JMP (se pueden modificar fácilmente para que también admitan letras que no sean mayúsculas):
Names Default To Here(1);
dt = New Table("Untitled 3",
Add Rows(5),
Compress File When Saved(1),
New Column("ID",
Character,
"Nominal",
Set Values(
{"ABC001235G", "ABC001234", "ABC001235", "ABC001234D", "ABC001234F"}
)
)
);
dt << New Column("Regex1", Character, Nominal, Formula(Regex(:ID, "^[A-Z]+(\d+)")));
dt << New Column("Regex2", Character, Nominal, Formula(Regex(:ID, "[A-Z]*$", "", GLOBALREPLACE);));
Dependiendo del caso de uso, elija uno (es fácil probar con el código de ejemplo cómo funcionan con diferentes cadenas):
El primero coincidirá con 1 o más caracteres mayúsculos desde el inicio de la cadena seguidos de cualquier cantidad de dígitos (por lo que ignorará todo lo que esté después de los dígitos).
El segundo coincidirá con cero o más caracteres mayúsculos del final de la cadena y los reemplazará con una cadena vacía.
Re: Recodificar columnas que contienen un valor de carácter al final de una columnaPuedes hacer esto con la siguiente fórmula:
val = Reverse( :ID );
While( Is Missing( Num( Substr( val, 1, 1 ) ) ),
val = Substr( val, 2 )
);
Reverse( val );
Esto eliminará todos los valores no numéricos finales.
Re: Recodificar columnas que contienen un valor de carácter al final de una columnaHola saneal!
Aquí tienes una fórmula que podría ayudarte, pero tendrás que hacer algunas suposiciones sobre las convenciones de nomenclatura y la precisión de la variable ID.
Si sus valores de ID tienen constantemente 3 caracteres al principio, puede crear una nueva columna y usar esta fórmula:
Substr( :ID, 1, 3 ) || Expresión regular( :ID, "\d+" )
Esta fórmula permitirá una longitud inconsistente de valores numéricos.Tampoco es demasiado difícil adaptar la fórmula para tener números inconsistentes de caracteres al comienzo de los valores de ID.Pero si alguien alguna vez escribe mal el ID como 0 (el número) en lugar de O (la letra), o cualquier otro error tipográfico determinado, es posible que obtenga resultados inesperados.
Buena suerte,
kevin