Cómo unirse y obtener columnas coincidentes comunes<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Una de las cosas con las que estoy luchando en JMP es el hecho de que, cuando quiero unir una tabla de muchos por muchos usando la función "Unir" en columnas coincidentes, las columnas coincidentes en la tabla resultante siempre obtienen /manténgase segregado entre cada una de las dos tablas de origen.JMP no parece proporcionar una forma automática o conveniente de obtener las columnas de coincidencia comunes con los valores completados para todas las filas, independientemente de en qué tabla de origen estaba presente la clave.Podría obtener columnas de coincidencia completamente completas y comunes, con columnas de "presencia" para indicar si esa clave estaba presente en cada tabla de origen.
Permítanme ilustrarlo con un ejemplo.Supongamos que tengo dos mesas ". Clase de arte " y " Clase de gimnasia ".La "clave principal" en cada tabla es la combinación de " Nombre de pila " y " Última inicial ".
Clase de arte :
| Nombre de pila | Última inicial | Color favorito | Puntaje |
|---|
| John | S | Rojo | 4 |
| John | B | Azul | 5 |
| Alicia | A | Verde | 6 |
| Alicia | METRO | Amarillo | 7 |
| Beto | S | Púrpura | 6 |
| Salida | C | Azul | 5 |
Clase de gimnasia :
| Nombre de pila | Última inicial | Actividad favorita | Puntaje |
|---|
| John | S | Barras | 8 |
| John | A | Lanzamiento de peso | 7 |
| Alicia | PAG | Fútbol | 6 |
| Beto | S | Baloncesto | 5 |
| Salida | C | Hockey sobre hierba | 5 |
| Beto | METRO | abdominales | 6 |
Si hago una unión en columnas coincidentes, equiparando Nombre y ApellidoInicial, sin eliminar múltiplos e incluyendo no coincidencias en ambas tablas (una "unión externa"), obtengo lo siguiente, que llamaremos " Estudiantes1 " ( Editar: Perdóneme si alguna de estas tablas se corta en la pantalla; Tal vez intente copiar esto en un documento de MS Word debido a cómo se muestra esta página web. 
Estudiantes1:
| Nombre de la clase de arte | Última inicial de clase de arte | Color favorito | Puntuación de ArtClass | Nombre de la clase de gimnasio | Última inicial de GymClass | Actividad favorita | Puntuación de GymClass |
|---|
| | | | John | A | Lanzamiento de peso | 7 |
| | | | Alicia | PAG | Fútbol | 6 |
| | | | Beto | METRO | abdominales | 6 |
| John | S | Rojo | 4 | John | S | Barras | 8 |
| John | B | Azul | 5 | | | |
| Alicia | A | Verde | 6 | | | |
| Alicia | METRO | Amarillo | 7 | | | |
| Beto | S | Púrpura | 6 | Beto | S | Baloncesto | 5 |
| Salida | C | Azul | 5 | Salida | C | Hockey sobre hierba | 5 |
Lo que preferiría obtener es el siguiente tipo de tabla, a la que llamaremos " Estudiantes2 ":
Estudiantes2:
| Nombre de pila | Última inicial | Color favorito | Puntuación de ArtClass | Presente en ArtClass | Actividad favorita | Puntuación de GymClass | Presente en GymClass |
|---|
| Alicia | A | Verde | 6 | 1 | | | 0 |
| Alicia | METRO | Amarillo | 7 | 1 | | | 0 |
| Alicia | PAG | | | 0 | Fútbol | 6 | 1 |
| Beto | METRO | | | 0 | abdominales | 6 | 1 |
| Beto | S | Púrpura | 6 | 1 | Baloncesto | 5 | 1 |
| John | A | | | 0 | Lanzamiento de peso | 7 | 1 |
| John | B | Azul | 5 | 1 | | | 0 |
| John | S | Rojo | 4 | 1 | Barras | 8 | 1 |
| Salida | C | Azul | 5 | 1 | Hockey sobre hierba | 5 | 1 |
Observe cómo en la segunda versión, solo tengo un conjunto común de columnas coincidentes: Nombre de pila y Última inicial -- que está completamente poblado para todas las filas.También tengo columnas que me dicen si la clave estaba presente en cada una de las tablas de origen (ArtClass y GymClass).Por el contrario, en la primera versión ( Estudiantes1) , la única forma de saber si cada clave estaba presente en cada tabla de origen es viendo si las columnas de claves segregadas (" Nombre de la clase de arte "/" Última inicial de clase de arte ", " Nombre de la clase de gimnasio "/" Última inicial de GymClass ") faltan o están presentes.
Una forma en que ideé la segunda versión, Estudiantes2 , fue realizando el siguiente procedimiento indirecto:
- Subconjunto o Resumen cada una de las dos tablas fuente ( Clase de arte y Clase de gimnasia ) por las columnas coincidentes, " Nombre de pila " y " Última inicial ".
- Concatenar las dos tablas de subconjunto hechas en el n.° 1.
- Resumen la tabla hecha en el punto 2 por las columnas coincidentes (" Nombre de pila ", " Última inicial ") para eliminar duplicados y obtener las claves únicas de la tabla unida; elimine la columna "N filas".
- En Clase de arte , agregue temporalmente una columna constante " Presente en ArtClass " establecido en todos unos.
- En Clase de gimnasia , agregue temporalmente una columna constante " Presente en GymClass " establecido en todos unos.
- En Clase de arte , cambiar temporalmente " Puntaje " a " Puntuación de ArtClass " para eliminar la ambigüedad de esta columna de la de GymClass.
- En Clase de gimnasia , cambiar temporalmente " Puntaje " a " Puntuación de GymClass " para eliminar la ambigüedad de esta columna de la de ArtClass.
- En la tabla creada en el punto 3, actualice desde cada una de las dos tablas fuente modificadas temporalmente ( Clase de arte y Clase de gimnasia ), coincidiendo con " Nombre de pila " y " Última inicial " y agregando todas las columnas.(2 operaciones separadas)
- En la misma tabla, seleccione las columnas " Presente en ArtClass " y " Presente en GymClass "; hacer Estandarizar atributos y Recodificar el valor faltante será 0, de modo que los valores de "presencia" sean 0 o 1. Este es el resultado deseado, Estudiantes2 .
Tenga en cuenta que, en este procedimiento para realizar Estudiantes2 , tuve que segregar manualmente los conflictos no clave columna, " Puntaje ", que la Unirse La función originalmente se había hecho automáticamente para mí al realizar Estudiantes1 (cambiando cada " Puntaje " a " Puntuación de... "), que es lo que quería que hiciera.Sin embargo, el problema con el Unirse función es que hace lo mismo para el llave columnas, que yo no quiero que haga: quiero que las columnas clave sean comunes para toda la tabla unida, con columnas separadas para marcar la presencia en cada tabla de origen.Mi procedimiento anterior no es escalable a situaciones en las que es posible que tenga muchas más columnas no clave en conflicto para sus datos.
El único método alternativo que he descubierto es utilizar el Unirse funcionar como antes, pero para agregar manualmente una columna de fórmula para cada columna de coincidencia que combinaría el par segregado de esa columna de coincidencia (por ejemplo, " Nombre de pila "sería una columna de fórmula en " Nombre de la clase de arte " y " Nombre de la clase de gimnasio "), y también agregar columnas de fórmula para la presencia en cada tabla de origen que tendrían que probar si todas las columnas de coincidencia segregadas correspondientes a cada tabla de origen faltan o no (por ejemplo, " Presente en ArtClass "sería una fórmula sobre si ambos" Nombre de la clase de arte " y " Última inicial de clase de arte " están perdidos).Este también es un proceso muy tedioso y indirecto.
Me pregunto si existe una solución mejor y más eficiente para lo que intento hacer, es decir, generar Estudiantes2 en mi ejemplo?¿Sería con un script o complemento de algún tipo?
Además, ¿SAS podría considerar algo como esto como una futura extensión de funciones para JMP?
Agradecemos cualquier ayuda con esto.
Re: Cómo unirse y obtener columnas coincidentes comunesCreo que has resumido bastante bien los comportamientos y las limitaciones.
Se los pasaré a nuestro personal de desarrollo para ver si podemos realizar algunas mejoras en una versión futura.
-Jeff
Re: Cómo unirse y obtener columnas coincidentes comunes¡Ah, excelente!(Gracias por la respuesta rápida). Supongo que, en cierto modo, estaba justo delante de mis narices, y no recuerdo bien si pude haber probado esa casilla de verificación hace mucho tiempo y olvidarme de lo que hace.Yo diría que esto resuelve la mayor parte de este problema, porque es bastante sencillo recodificar "Match Flag" (por ejemplo, en "ArtClass"/"GymClass"/"Both") o dividirlo en dos columnas separadas de "presencia" si se desea. (como lo tuve en Estudiantes2 ).
Supongo que la única advertencia aquí, sin embargo, es que podría ser necesario cambiar mucho el nombre de las columnas manualmente si hay muchas columnas análogas sin clave con nombres comunes como " Puntaje " en mi ejemplo.Parece que si no cambia el nombre de las columnas comunes que no son clave, aparentemente esas columnas en la tabla unida resultante parecen tomar el valor arbitrariamente de una tabla fuente u otra.(Quizás exista algún método interno para determinar cuál "gana").
De esta manera, el " Unirse "La utilidad nos permite elegir entre:
(a) eliminar automáticamente la ambigüedad de todo lo que queremos pero segregar las columnas clave que no queremos, cuando no seleccione "Fusionar los mismos nombres de columnas", como en generar Estudiantes1 en mi publicación, o
(b) combinar comúnmente las columnas coincidentes y dar una columna indicadora de presencia, lo cual queremos, pero dejar que las columnas sin clave con nombres comunes entren en conflicto entre sí, lo cual no queremos, cuando hacer seleccione "Fusionar los mismos nombres de columnas".
¿Conoce alguna buena solución para esta advertencia?
De lo contrario, ¡gracias por señalar esto!
Re: Cómo unirse y obtener columnas coincidentes comunesHay una opción "Fusionar columnas del mismo nombre" en el cuadro de diálogo Unirse que hará lo que sugiere su nombre y le brindará un conjunto de Nombre de pila y Última inicial columnas.
En su ejemplo, tiene una columna llamada Puntuación en cada tabla, por lo que deberá cambiarles el nombre a Puntuación de gimnasio y Partitura de arte . Después de hacer eso, puede completar el cuadro de diálogo Unirse de esta manera:

Y obtienes una tabla de datos como esta:

La columna Bandera de coincidencia indica qué tablas contribuyeron a cada fila. 1==Mesa Principal, 2==Con Mesa, 3 == Ambos.
Creo que eso es lo que estás buscando, o muy cerca de todos modos.
-Jeff