之前以为自己的Excel数据处理本领还行,直到遇到了三万多条面板数据,我就觉得自己之前的小伎俩使不上劲了,因为数据量太大导致wps爆了几次直接关闭或者长时间卡顿。趁着今天不太忙,我把之前整理的问题通过网上冲浪+各种外援解决了。
今天的数据处理主要是针对面板数据,且文章中提到的解决方式涉及的软件有点多,主要是Excel函数、R语言函数。
问题一:我们都知道Eviews中的面板回归模型要求数据长这样(图1):第一列是截面,第二列是年份。虽然不设置成这样也能做模型,但是有时候就是需要把数据像 列1列2 这样表示出来。现在有这样一个问题,如果有2000个截面,我怎么把每个截面重复10次?如果有一串数字,怎么把它按所给顺序重复10次?
针对问题一的我的解决方法:
这个时候函数就很香了,我使用的R语言。
函数形式:rep(x, time = , length = , each = ,)
参数说明:
x:代表的是你要进行复制的对象,可以是一个向量或者是一个因子。
times:代表的是复制的次数,只能为正数。负数以及NA值都会为错误值。复制是指的是对整个向量进行复制。
each:代表的是对向量中的每个元素进行复制的次数。
length.out:代表的是最终输出向量的长度。
rep(1:4, 2) #对向量(1,2,3,4)复制两次
[1] 1 2 3 4 1 2 3 4
rep(1:4, each = 2) #对向量(1,2,3,4)中的每个元素复制两次
[1] 1 1 2 2 3 3 4 4
rep(1:4, each = 2, length.out = 4) #最后输出向量的长度为4
[1] 1 1 2 2
> rep(c('BJ','TJ','HB'),each = 10)
[1] "BJ" "BJ" "BJ" "BJ" "BJ" "BJ" "BJ" "BJ" "BJ" "BJ" "TJ" "TJ" "TJ" "TJ" "TJ" "TJ"
[17] "TJ" "TJ" "TJ" "TJ" "HB" "HB" "HB" "HB" "HB" "HB" "HB" "HB" "HB" "HB"
> rep(c(2003,2004,2005,2006,2007,2008,2009,2010,2011,2012),time = 3)
[1] 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2003 2004 2005 2006 2007 2008
[17] 2009 2010 2011 2012 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
问题二:某列有3个数字,计算一下这3个数在另一列数字中出现了几次?
针对问题二的我的解决方法:
使用工具:Excel的countif函数。详情见图2。
问题三
EXCEL中如何实现两个表格之间的数据自动匹配、补全、合并成一个表格?
针对问题二的我的解决方法:
这里参考网上解决方式-使用Excel中的Power Query。表一和表2均按照以下设置:选定表中区域内任意单元格--数据-从表格-关闭并上截至-仅创建连接;最终信息要在哪个表里表现,就选哪个表,比如这里要将表1放到表2,那就选表2;同一个表中,选择一个列后,按ctrl可再选其他列,最后选择“合并查询”。
图3--表1
图4--表2
问题四
终极问题,怎样判断某个注册会计师在他的公司是否是首次出现?
我是一个划水程序媛,这种组合排序的问题我确实不会写代码,我身边的程序猿大神们几行代码就解决了这个问题。我只有Excel(微笑脸)。这里主要用到数据透视表,以及人工搬运(复制粘贴)。
针对问题四的我的解决方法:
图5--问题三的案例数据
图6--问题三的解决过程1
图7--问题三的解决过程2
建立图6所示的数据透视表。(其中的难点:最后一列字段的添加是这样的,在建立数据透视表时,“值”部分选2次签字注册会计师,然后将新加的签字注册会计师那一列的某一单元格选中,右键-值显示方式-按某一字段汇总,这样就得到某一会计师在当前证券公司下的累计出现次数。得到这个值的目的是,如果该值为1,则为首次出现,若该值大于1,则非首次出现)。
最后祝大家学习愉快!如果有更好的办法,可以告知哦。
网友评论