我正在准备擅长电子表格中,我将行中的时间序列数据移动到列中,因为每个类别(在本例中为国家/地区)的数据点数量不同。如果我描述得不够完美,请提前致歉。
我将通过一个例子来解释这一点。这是我目前拥有的模型:
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 ...
数据集很大并且运行时间较长。
我希望数据集看起来像这样:
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 ...
我可以很容易地生成我想要的结构:
Country 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 Afghanistan Albania Algeria ...
但我无法弄清楚如何填充表格。我认为我需要执行 hlookup 或 vlookup,从列移动到行,并且它需要处理多个匹配条件 - “国家”+“年份”(我尝试连接,但产生了太多数据点:Afghanistan2000,Afghanistan2001,等等)。
而且数据透视表似乎不起作用,因为它会对数据求和,并且复制“if(and(”语句不会起作用,因为它的列到行。
我在网上找遍了所有地方,但还是没能找到解决此问题的工具。尽管如此,我确信有一个简单的解决方案,但我似乎无法找到它。
如果有人能提供帮助,我将不胜感激,因为我获得了很多这种格式的时间序列数据。
答案1
你可以这样做无需任何公式通过使用构建查询获取并转换假设您使用的是 Windows 上最新版本的 Office。
以下是针对您提供的数据执行此操作的方法:
- 首先,将原始数据放在表格中(选择范围内的任意单元格 >
ALT+N -> T
),并确保年份列按从小到大排序 - 接下来,从表中进行查询(
ALT+O -> PT
) - 在查询编辑器中,转到
Transform
选项卡并选择Pivot Column
- 对于
Values Column
选择Data
- 在
Home
选项卡上选择Close and Load
这将输出下表:
关于这一点最好的部分是,当原始源发生变化时,您只需重新运行查询,ALT+A -> R -> A
它就会填充新数据。
答案2
如果数据已排序,那么您可以使用INDEX:INDEX
并MATCH
像 B2 那样(Sheet1 用于列表,Sheet2 用于假设公式):
首先设置要查看的范围MATCH
MATCH(Sheet2!$A2,Sheet1!$A:$A,0)
MATCH(Sheet2!$A3,Sheet1!$A:$A,0)-1
这样你就得到了国家的第一行和最后一行。现在设置要查看的范围。
INDEX(Sheet1!$B:$B,MATCH(Sheet2!$A2,Sheet1!$A:$A,0)):INDEX(Sheet1!$B:$B,MATCH(Sheet2!$A3,Sheet1!$A:$A,0)-1)
输出看起来是一样的$C:$C
。
为了找到正确的行,我们使用
MATCH(Sheet2!B$1,[Search range formula],0)
将其代入完整公式中
INDEX([output range],[right row])
如果没有找到匹配项,则会出现错误,因此请在其周围放置一个错误部分
IFERROR([full formula],"")
总的来说它看起来应该是这样的
=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)),"")
可以根据需要自动向左和向下填充。只需在两个列表的最后一行后添加一行,如“zzz”,否则最后一个国家将不会输出任何内容。
通过电话完成,可能包含错误。
答案3
答案4
感谢大家的建议,不过我最终还是使用数据透视表解决了这个问题。我所要做的就是创建一个数据透视表。将列设置为“年份”,将行设置为“国家”,将值设置为“数据”。
然后我只需将数据的“字段值设置”设置为“最大”,表格就会被填充。最后花了大约 30 秒...
您可以从数据透视表字段对话框中值框中“数据”字段的下拉菜单中访问“字段值设置”。
再次感谢您的回答,我一定会尝试匹配、索引公式。