有问必答:一列变多列

2017-11-14 王明 爬虫俱乐部 爬虫俱乐部

 有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

Hello!诸君安!最近有粉丝提问,在数据处理中,如何将一列变多列?小编整理了四种方法。

第一奥义——错开行数

小编手上有一个C刊目录源数据的文本文件,我们首先用insheet读入,并且第一行不作为变量名(数据链接https://raw.githubusercontent.com/Stata-Club/Sharing-Center-of-Stata-Club/master/article/C%E5%88%8A%E7%9B%AE%E5%BD%95%E6%BA%90%E6%95%B0%E6%8D%AE.txt)。

clear

cd E:\Stata教程\CSSCI

insheet using "C刊目录源数据.txt", nonames

经过观察我们发现,包含“期刊名称”“主办(管)单位”“CN号”和“多少种”的行,我们并不需要,是无用信息。我们把这些行删除,接下来,我们发现每三行分别是期刊名称 、主办单位、 CN号,我们需要把这三个信息分别变成三列,再压缩一下,程序如下:

drop if ustrregexm(v1, "期刊名称|主办(管)单位|CN号|(\d+种)")

gen v2 = v1[_n + 1]

gen v3 = v1[_n + 2]

keep if mod(_n, 3) == 1

compress

rename (v1 v2 v3) (期刊名称 主办单位 CN号)

这时,规整的信息就到我们碗里来了,是不是很神奇呢!

第二奥义——split

仔细研究了一下这个数据,小编又萌生了一个新的想法,第一行加上第二行加上第三行,然后再拆开,心动不如行动。程序如下:

replace v1 = v1[_n] + ";" + v1[_n + 1] + ";" + v[_n + 2]

keep if mod(_n, 3) == 1

split v1, p(";")

drop v1

rename (v11 v12 v13) (期刊名称 主办单位 CN号)

compress

这样我们又得到我们需要的数据了。

第三奥义——reshape

reshape命令能帮助我们把数据从长型变成宽型,或者从宽型变成长型。这里我们需要把长型变成宽型,从而达到一列变多列的目的。首先我们根据reshape的语法生成两个变量idyear,然后把长型转变成宽型,压缩一下,删除id变量,并重命名。具体程序如下:

gen id =(mod(_n,3)==1)

replace id = sum(id)

egen year= seq(), from(1) to(3)

reshape wide v, i(id) j(year)

compress

drop id

rename (v11 v12 v13) (期刊名称 主办单位 CN号)

运行结果如下:

我们在命令窗口中输入br,可以看到如下界面:

可以看出,最后结果是一样的。如果对reshape有不懂的地方,请翻看往期推文《扁担宽板凳长,reshape让你们都变形

最终奥义——post

是不是不够过瘾,小编给大家带来最终奥义——post,post命令是数据处理的法宝,我们有多篇推文介绍过,比如《免费事件研究,一片片从邮局寄来》、《免费事件研究,一片片从邮局寄来——国泰安版本》和《如何输出中国上市公司上一个交易日的收盘价》,而且每篇推文都不一样,可见其重要性。具体程序如下:

capture postclose mypost

postfile mypost str100 期刊名称 str100 主办单位 str100 CN号 using temp.dta, replace

forvalues i = 1/`=_N/3'{

       post mypost (v1[`i'*3-2]) (v1[`i'*3-1]) (v1[`i'*3])

}

postclose mypost

运行结果如下:

use E:\Stata教程\CSSCI\temp.dta,clear

compress

br

得到的最终结果和前三种方法也是一样的。萝卜青菜各有所爱,总有一款适合你,赶紧选一款收藏一下,妈妈再也不用担心我的一列变多列了。

注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同纯属巧合!

接下来是个好消息!!!

喜大普奔,爬虫俱乐部的github主站正式上线了!!!

我们的网站地址是:https://stata-club.github.io

粉丝们可以通过该网站访问过去的推文啦~

我们真诚地欢迎您为本站的建设提出建议~

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

文字编辑/闫续文

技术总编/刘贝贝


往期推文推荐:

1.高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.命令sum2docx输出统计量表到docx文件

4.reg2docx报告你的实证结果吧!

5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件

6.putdocx+wordconvert—将实证结果输出到Word.docx)文档

7.Stata 15Markdown——没有做不到,只有想不到!

8.矩阵和宏的故事

9.shelloutopen anything

10.Putpdf--神奇的转换工具



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部

微信扫一扫
关注该公众号