Tengo un archivo de texto, csv o excel que se parece a
||--ID-----||--Name--||--Date of birth--||
1 Jo 1/1/11
32 Mo 2/2/12
3382 Ro 3/3/10
21,252 Do 4/4/09
El conjunto real contiene 280.000 de estos de un total de 1.000.000 de filas. Necesito agregar de alguna manera todos los números de identificación que faltan (que son todos iteraciones secuenciales +1) y simplemente vaciar los campos para el nombre y la fecha de nacimiento. Entonces obtengo algo que se parece a:
||--ID-----||--Name--||--Date of birth--||
1, "Jo", "1/1/11"
2, "", ""
3, "", ""
4, "", ""
hasta 32 y luego nuevamente hasta que todos los números enteros estén allí. ¿Hay una forma fácil de hacer esto? ¿Sin escribir un bloque de código en un bucle? Se agradecería cualquier cosa, desde Excel, alguna aplicación o cualquier truco del editor de texto de Windows.
Editar: ignore las comas, comillas, etc. Los números de identificación que faltan son lo único crítico.
Respuesta1
Un enfoque sería:
- importe su CSV para sobresalir como hoja 1.
- en la Hoja 2, cree su lista completa de números de identificación con una fórmula como a2: =a1+1 y luego cópiela hacia abajo.
- use fórmulas de búsqueda virtual en las otras 2 columnas, refiriéndose a su tabla en la hoja 1, como b2:
=VLOOKUP(A2,Sheet1!A2:C13,2,false)
y c2:,=VLOOKUP(A2,Sheet1!A2:C13,3,false)
o para que coincida exactamente con su solicitud, incluyamos eso en una declaración IFNA para devolver "" si no hay ningún valor. b2:=IFNA(VLOOKUP(A2,Sheet1!A2:C13,2,FALSE),"")
y c2:=IFNA(VLOOKUP(A2,Sheet1!A2:C13,3,FALSE),"")
(estas fórmulas ahora se pueden copiar en la columna). - Una vez completada, guarde la hoja 2 como CSV.
Nota: para que esto funcione correctamente, la tabla de la hoja 1 deberá ordenarse en la columna 1. Según la información proporcionada, parece ser así, pero si no es así, ordene la información en la primera columna.
Con un millón de filas, esto se volverá muy lento en muchas computadoras, me lo perdí antes de escribir las fórmulas. Una vez hice algo similar con un gran conjunto de datos: desactivé el cálculo automático para tener todas las fórmulas en su lugar y luego hice un cálculo manual. que tomó horas pero se completó correctamente.
Respuesta2
Resolvería esto con el complemento Power Query.
Creé un prototipo que puedes ver o descargar: su "demostración de Power Query - Agregar números de identificación faltantes a una serie.xlsx" en mi One Drive:
https://onedrive.live.com/redir?resid=4FA287BBC10EC562%21398
Se necesitan algunos pasos para llegar allí y un poco de codificación en el lenguaje Power Query (M) para llamar a la función List.Numbers (no está expuesta en la interfaz de usuario de Power Query). Aún así, es solo una simple línea de código; el resto se puede crear haciendo clic en Power Query.
Básicamente, mi técnica fue usar List.Numbers para generar una tabla de números de identificación, luego agregué una combinación para obtener las columnas de los datos de entrada (donde existe el número de identificación).
La documentación para List.Numbers está aquí:
http://office.microsoft.com/en-au/excel-help/list-numbers-HA104111648.aspx?CTT=5&origin=HA104122363
Gran "consejo" para Matt Masson por la técnica de "Configuración".
http://www.mattmasson.com/2014/04/defining-configurable-settings-for-your-queries/
Nota Power Query puede leer directamente desde un archivo CSV, que usaría como fuente para la consulta "Datos de entrada". Probablemente sea más fácil eliminar esa consulta, luego crear una nueva a partir del archivo CSV y nombrarla "Datos de entrada". Desmarque la opción Cargar en hoja de trabajo para ahorrar recursos.