Convierta series temporales en columnas a series temporales en filas en Excel

0

Estoy tratando de preparar una hoja de cálculo de Excel en la que muevo los datos de la serie de tiempo que están en filas en columnas cuando cada categoría (países en este caso) tiene un número diferente de puntos de datos. Disculpas de antemano si no estoy describiendo esto perfectamente.

Dejaré esto en claro con un ejemplo. Esta es una maqueta de lo que tengo actualmente:

Country         Year     Data
Afghanistan     2000     10  
Afghanistan     2004     12
Afghanistan     2006     15
Afghanistan     2010     30 
Albania         2001     40
Albania         2002     50
Albania         2005     55
Albania         2006     70
Albania         2008     60
Albania         2009     60
Algeria         2000     23
Algeria         2005     30
Algeria         2006     40
Algeria         2007     41
Algeria         2008     39
Algeria         2009     35
Algeria         2010     40  
...

El conjunto de datos es grande y se ejecuta durante un período de tiempo más largo.

Lo que quiero que se vea el conjunto de datos es esto:

Country       2000    2001    2002    2003    2004    2005    2006   2007     2008      2009    2010  
Afghanistan:  10                              12              15                                30  
Albania:              40       50                     55      70              60        60  
Algeria:      23                                      30      40     41       39        35      40 
...

Puedo generar la estructura que quiero con bastante facilidad:

Country      2000    2001     2002     2003    2004   2005    2006   2007     2008     2009    2010  
Afghanistan  
Albania    
Algeria      
...

Pero no puedo resolver cómo llenar la tabla. Creo que necesito hacer una búsqueda hlookup o vlookup, pasar de columnas a filas, y necesita manejar múltiples criterios para hacer coincidir: 'país' + 'año' (intenté concatinar , pero eso hizo demasiados puntos de datos: Afganistán 2000, Afganistán 2001, etc., etc.

Además, la tabla dinámica no parece funcionar porque suma los datos, y la copia de las declaraciones "if (y (") no funcionará porque sus columnas están en filas.

He estado en Internet y no puedo encontrar la herramienta para esto. No obstante, estoy seguro de que hay una solución simple, pero parece que no puedo resolverlo.

Si alguien puede ayudar, sería muy apreciado ya que obtengo muchos datos de series temporales en este formato.

MorrisseyJ
fuente

Respuestas:

0

Si los datos están ordenados, puede ir con INDEX:INDEXy MATCHpara B2 (Hoja1 para la lista y Hoja2 para la fórmula):
primero configure el rango para mirar a través deMATCH

MATCH(Sheet2!$A2,Sheet1!$A:$A,0)
MATCH(Sheet2!$A3,Sheet1!$A:$A,0)-1

de esta manera obtienes la primera y última fila para el país. Ahora configure el rango para mirar.

INDEX(Sheet1!$B:$B,MATCH(Sheet2!$A2,Sheet1!$A:$A,0)):INDEX(Sheet1!$B:$B,MATCH(Sheet2!$A3,Sheet1!$A:$A,0)-1)

La salida se verá igual solo para $C:$C.
Para encontrar la fila correcta usamos

MATCH(Sheet2!B$1,[Search range formula],0)

Pon esto en la fórmula completa

INDEX([output range],[right row])

Como esto generará un error si no se encuentra una coincidencia, también coloque una parte de error

IFERROR([full formula],"")

todos juntos deberían verse así

=IFERROR(INDEX(INDEX(Sheet1!$C:$C,MATCH(Sheet2!$A2,Sheet1!$A:$A,0)):INDEX(Sheet1!$C:$C,MATCH(Sheet2!$A3,Sheet1!$A:$A,0)-1),MATCH(Sheet2!B$1,INDEX(Sheet1!$B:$B,MATCH(Sheet2!$A2,Sheet1!$A:$A,0)):INDEX(Sheet1!$B:$B,MATCH(Sheet2!$A3,Sheet1!$A:$A,0)-1),0)),"")

Esto se puede rellenar automáticamente a izquierda y hacia abajo según lo necesite. Simplemente agregue una línea después de la última línea en ambas listas como "zzz" o el último país no mostrará nada.

ingrese la descripción de la imagen aquí

Hecho por teléfono y puede contener errores.

Dirk Reichel
fuente
0

Puede hacer esto sin ninguna fórmula compilando una consulta usando Get and Transform asumiendo que está en la última versión de Office en Windows.

Aquí le mostramos cómo hacerlo para los datos que proporcionó:

  1. Primero, coloque los datos originales en una tabla (seleccione cualquier celda en el rango> ALT+N -> T) y asegúrese de que la columna del año esté ordenada de menor a mayor
  2. A continuación, realice una consulta desde la tabla ( ALT+O -> PT)
  3. En el Editor de consultas, vaya a la Transformpestaña y seleccionePivot Column
  4. Para el Values ColumnseleccioneData
  5. En la Homepestaña seleccioneClose and Load

Esto genera la siguiente tabla:

La mejor parte de esto es cuando cambia la fuente original, solo necesita volver a ejecutar la consulta ALT+A -> R -> Ay se completarán los datos nuevos.

Chris Sardegna
fuente
0

Entrar

=SUMPRODUCT((TRIM($A$2:$A$18)=TRIM($E3))*(TRIM($B$2:$B$18)=TRIM(F$2))*$C$2:$C$18)

adentro F3y cópielo / arrástrelo para llenar toda la tabla ( F3:P5en el ejemplo):

ingrese la descripción de la imagen aquí

Esta fórmula se coloca 0, cuando no hay datos, por lo que puede usar fácilmente la IF()función si necesita tener celdas vacías.

g.kov
fuente
0

Gracias a todos por las sugerencias, sin embargo, en realidad logré resolver esto usando una tabla dinámica. Todo lo que tenía que hacer era crear una tabla dinámica. Establezca las columnas en 'año', establezca las filas en 'país' y establezca los valores en 'datos'.

Luego solo tuve que establecer la 'configuración del valor de campo' para los datos en 'max' y la tabla se rellenó. Tomó unos 30 segundos al final ...

Puede acceder a la 'Configuración del valor de campo' desde el menú desplegable en el campo 'datos' en el cuadro de valores, dentro del cuadro de diálogo Campos de tabla dinámica.

Gracias de nuevo por las respuestas. Definitivamente intentaré el partido, indexar fórmulas en algún momento.

MorrisseyJ
fuente