查看原文
其他

巧用stack命令,堆栈变量内容

石河子大学田宗涛 Stata and Python数据分析 2022-03-15

有问题,不要怕!

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

2017.11.12

请输入标题     bcdef

通常我们在数据搜集和实证研究的过程中,我们可能会遇到这样一个问题:如何将多列同类数据转换成一列或两列?下面介绍的stack命令可以帮我们非常巧妙解决这个问题!

请输入标题     abcdefg

stack命令

help stack

我们可以看到,stack命令的语法格式是:

stack varlist [if] [in] ,{into(newvars)|group(#)} [options]

选项如下:

 *-into(newvars):指定生成的新变量名;

 *-group(#):指定堆积变量的组数,创建的变量将根据变量表中的第一组命名;

 *-clear:清除数据集中指定内存,如果没有指定此选项,stata将会询问确认你的意图;

 *-wide:在新数据集中,显示包含变量列表中所有初始变量,可以根据自己的需要选择。

举例学习

*1.两列变一列

举个栗子,首先生成如下数据:

clear

set more off

input m n

1 4

2 5

3 6

end

list

以下便是我们创造的数据内容:

stack m n, into(var) clear 

*or

stack m n, into(var) clear wide

通过以上结果可以发现,我们在将两列数据变成一列数据的过程中,stack命令自动创造出一个新变量_stack,可以用来识别组数。其中m变量是第一组,n变量是第二组。

*2.多列变作三列

举个栗子,首先生成如下九列数据:

clear

input id1 time1 var1 id2 time2 var2 id3 time3 var3

1 2001 233 4 2001 123 7 2001 452

2 2001 123 5 2001 123 8 2001 133

3 2001 145 6 2001 123 9 2001 111

end

list

stack id1 time1 var1 id2 time2 var2 id3 time3 var3, ///

into(stkcd year content) clear

list

当然,你也许会问我们可以直接把数据堆积在已有的变量名下吗?回答是肯定的,下面我们试着将id1 time1 var1 id2 time2 var2 id3 time3 var3这九个变量堆积在id3 time3 var3下,我们发现,这是可行的。具体做法如下:

clear

input id1 time1 var1 id2 time2 var2 id3 time3 var3

1 2001 233 4 2001 123 7 2001 452

2 2001 123 5 2001 123 8 2001 133

3 2001 145 6 2001 123 9 2001 111

end

list

stack id1 time1 var1 id2 time2 var2 id3 time3 var3, ///

into(id3 time3 var3) clear

list

*或者

stack id1 time1 var1 id2 time2 var2 id3 time3 var3, ///

group(3)

list

*简写

stack id1-var3, into(id3 time3 var3) clear

注意

多列转换时,转换后数据集中变量的个数(3个)必须为原数据集中变量(9个)的公约数。

以下是错误命令,因为原数据集中有9个变量,而要堆积出来的变量仅有2个。

stack id1 time1 var1 id2 time2 var2 id3 time3 var3, ///

into(id3 time3 ) clear

*3.211大学目录

我们以前处理211大学目录.txt文件时,遇到把多列转换为一列的问题,我们可以通过preserve/restore命今、也可以先扩展再结合求余函数保留相应的行、当然用数据整理的法宝-post同样可以解决问题,我们在之后的推文中会专门总结这一问题。巧用stack命令能简化程序提高效率 ,导入数据,并进行分割:

clear

infix str200 univ 1-200 using 211大学目录.txt,clear

drop if univ==""

split univ, parse(;)

drop univ

接着使用stack命令,进行多列变一列的转换:

stack univ1 univ2 univ3,  into(univ) clear wide

drop if univ==""

至此,已是结尾。关于stack命令的应用,请多多应用于实际哦,希望给各位stata爱好者带来更多的便利。

注:此推文中的图片及封面均来源于网络!如有雷同纯属巧合!

接下来是个好消息!!!

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

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

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

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


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

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

文字编辑/王凯丽

技术总编/刘贝贝


往期推文推荐:

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

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

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

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

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

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

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

8.矩阵和宏的故事

9.shellout,open anything

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



关于我们

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

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

投稿邮箱:statatraining@163.com

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

欢迎关注爬虫俱乐部


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存