打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

暑期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为例来进行说明。

clearcap mkdir E:\citytempcd E:\citytempsysuse citytemp,clearforvalue i=1/4{       preserve       keep if region == `i'       save `i'.dta,replace       restore}

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

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

在变量source下:

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

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

......

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

当然,也可以直接合并:

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

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

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

clearcd E:\citytempfs *.dta //列出当前路径下所有的dta文件return list

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

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

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

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

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

clearcap mkdir e:/citytemp1cd e:/citytemp1sysuse citytemp,clearforvalue i=1/4{       preserve       keep if region == `i'       save `i',replace       restore}

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

clearlocal 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可以显示出观测值来源于哪个文件。

clearcap mkdir E:/citytemp2cd E:\citytemp2sysuse citytemp,clearforvalue i=1/4{       preserve       keep if region == `i'       save `i',replace       restore}

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

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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
学长教你论文实证(14):stata数据合并
DOS里如何判断文件大小及其它?我的一些
Make 命令教程
空格变成加号
【收藏】stata官方的范例数据
批处理命令与变量
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服