暑期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,届时会有俱乐部资深高级会员为您排忧解难!
我们可使用append或openall命令对数据文件进行纵向合并。但当文件量很大时,合并结果可能会发生一些错误,此时,我们需要知道合并后的观测值来源于哪个文件——找到病源,对症下药!
英雄可以不问出处,但数据还是有必要知道来源的!
第一部分:使用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
(注:上图系数据合并后,部分截取所得)
联系客服