大数跨境
0
0

纵向合并文件,如何显示数据来源?

纵向合并文件,如何显示数据来源? Stata and Python数据分析
2018-07-09
2

暑期Stata培训班招生啦!!!接力线上的网课培训,我们在今夏又开始新一轮的线下培训啦!8月4日至12日,爬虫俱乐部期待与您的相遇!培训具体内容详见推文《暑期Stata编程技术定制培训班》

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

喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

好消息:爬虫俱乐部隆重推出数据定制及处理业务啦,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部资深高级会员为您排忧解难!

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

喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

好消息:爬虫俱乐部隆重推出数据定制及处理业务啦,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部资深高级会员为您排忧解难!


我们可使用appendopenall命令对数据文件进行纵向合并。但当文件量很大时,合并结果可能会发生一些错误,此时,我们需要知道合并后的观测值来源于哪个文件——找到病源,对症下药!

英雄可以不问出处,但数据还是有必要知道来源的!

第一部分:使用append命令

方法一:直接使用append的option——generate(newvar)

即:生成一个新变量,它可以标记观测值来源。

在使用append命令前,主数据集的观测值会被标记为0

使用后,第一个被合并的数据集的观测值会被标记为1;第二个数据集的观测值会被标记为2;依次类推。

我们以STATA中的citytemp为例来进行说明。

clear
cap mkdir E:\citytemp
cd E:\citytemp
sysuse citytemp,clear
forvalue i=1/4{
       preserve
       keep if region == `i'
       save `i'.dta,replace
       restore
}

上述程序将citytemp拆分成了4个dta文件,同时保留了原始的citytemp

use 1,clear
append using 2 3 4,gen(source)  //使用gen选项生成一个变量source,以显示观测值来源

在变量source下:

1.dta(主数据集)的观测值被标记为0;

2.dta的观测值被标记为1;

......

依次类推,如下图(部分截取)所示:

当然,也可以直接合并:

clear
append using 1 2 3 4,gen(source) //这样,source变量下依次是1、2、3、4

如果需要进行纵向合并的数据文件很多,这种直接列出文件名的做法就有些繁琐了,并且,在查找观测值来源时,也容易产生混淆。在这些情况下,我们可以使用循环。

方法二:利用fs命令的返回值,使文件名变为数据中的一个变量

clear
cd E:\citytemp
fs *.dta //列出当前路径下所有的dta文件return list

foreach x in `r(files)'{
       use `x',clear
       gen source="`x'" //因文件名为一个字符串,所以在这里加引号
       save `x',replace
}

这样,在每个dta文件的source变量下,显示出了数据的来源。下面就是使用循环就行合并了。

clear //使用前一定要clear,否则会和之前内存中的数据进行合并
fs *.dta
foreach file in `r(files)'{
       append using `file'
}

(注:上图系数据合并后,部分截取所得)

方法三:使用宏扩展函数+foreach循环

clear
cap mkdir e:/citytemp1
cd e:/citytemp1
sysuse citytemp,clear
forvalue i=1/4{
       preserve
       keep if region == `i'
       save `i',replace
       restore
}

对citytemp处理,生成4个dta文件,存入到新建的citytemp1文件夹之中

clear
local files: dir "." files "*.dta" //利用宏扩展函数,将当前缺省路径下所有的dta文件的文件名放到局部宏files中
di `files' //显示文件名
foreach file in `files'{
       use `file',clear
       cap gen source="`file'"
       save `file',replace
}

这样,就让文件名变为数据中的source变量,然后再对上述dta文件进行纵向合并即可。

第二部分:使用openall命令

openall命令可对当前目录下所有的dta文件或者对csv文件进行纵向合并。

openall中的选项storefilename可以显示出观测值来源于哪个文件。

clear
cap mkdir E:/citytemp2
cd E:\citytemp2
sysuse citytemp,clear
forvalue i=1/4{
       preserve
       keep if region == `i'
       save `i',replace
       restore
}

上述程序生成的dta文件不显示观测值来源于哪个文件。

openall *,storefilename(source) //storefilename指一个显示观测值来源的文件名的变量,在这里,这个变量是source

(注:上图系数据合并后,部分截取所得)

好了,关于纵向合并文件来源的介绍就到这里了,如果有其他的方法,也欢迎大家投稿!

注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

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

-文字编辑:吴晓蔓-

-技术总编:刘贝贝-

往期推文推荐:

1.爬虫俱乐部新版块--和我们一起学习Python

2.hello,MySQL--Stata连接MySQL数据库

3.hello,MySQL--odbcload读取MySQL数据

4.再爬俱乐部网站,推文目录大放送!

5.用Stata生成二维码—我的心思你来扫

6.Hello,MySQL-odbc exec查询与更新

7.Python第一天

8.Python第二天

9.事件研究大放送

10.爬虫俱乐部隆重推出网上直播课程第一季



关于我们

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

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

投稿邮箱:statatraining@163.com

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

【声明】内容源于网络
0
0
Stata and Python数据分析
爬虫俱乐部,新的启航
内容 1337
粉丝 0
Stata and Python数据分析 爬虫俱乐部,新的启航
总阅读244
粉丝0
内容1.3k