推荐stata合并数据范例word版本 16页.docx
《推荐stata合并数据范例word版本 16页.docx》由会员分享,可在线阅读,更多相关《推荐stata合并数据范例word版本 16页.docx(14页珍藏版)》请在冰豆网上搜索。
![推荐stata合并数据范例word版本 16页.docx](https://file1.bdocx.com/fileroot1/2023-1/2/c3155904-9e02-4672-815c-b709145359d3/c3155904-9e02-4672-815c-b709145359d31.gif)
推荐stata合并数据范例word版本16页
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!
==本文为word格式,下载后可方便编辑和修改!
==
stata合并数据范例
篇一:
stata数据折分或合并
stata数据折分或合并
命令
命令解释
用法示例
drop
删除变量或观察值
dropmath
keep
保留变量或观察值
keepmath
append
将两个数据集拼接(观察值拼接)
appendusingmath
merge
将两个数据集合并(变量合并)
mergeidusingmath
reshape
将数据重整
reshapelonginc,i(id)j(yr)
stack
将多列数据转换成一列数据
stackabcd,into(ef)
xpose
数据转置
xpose,clear
*---将mydata拆分成女生数据集female---
.usemydata,clear?
.keepifgender==0?
.savefemale,replace?
*---将mydata拆分成男生数据集male---
.usemydata,clear?
.dropifgender==0?
.savemale,replace
?
将女生数据集female.dta和男生数据集male.dta合并为新的数据集mydata1原始数据同上。
?
参考操作*========begin=========/*
?
*---------将女生数据集female和男生数据集male合并为新数据mydata1--------
?
.usemale,clear
?
.appendusingfemale
?
.savemydata1,replace
?
*===========end==========/*
篇二:
用stata做多个文件的合并
用Stata做多个文件的合并
在我们写论文处理数据时,通常会遇到我们需要的数据从国泰安中下载下来,会因为我们的数据超过excel的最大65536行的行数限制,而被分为两个或几个表,这时,我们需要对表进行纵向的合并,需要用到append命令;当我们需要从国泰安中下载的变量的数据在不同的板块,也就造成数据会出现在不同的表中,这时,我们需要横向合并各个表,当数据不能一一对应时,是不能通过复制粘贴将数据复制到一张表中,这时需要用merge命令。
下面通过一些例子进行说明:
1、纵向合并
比如:
我们从国泰安中公司研究系列—CSMAR中国上市公司财务报表数据库—现金流量表中下载201X到201X年的现金流量表,下载下来发现数据因为太多分为了两个表,这时,我们需要纵向合并这两个表,先分别将两个现金流量表读入到Stata中存为.dta文件,再放到同一文件夹中,最后进行合并。
如下:
setmoreoff
cdC:
\Users\Administrator\Desktop\财务数据(国泰安)
useC:
\Users\Administrator\Desktop\财务数据(国泰安)\xjllb改.dta,clear#delimit;
appendusing
xjllb改1;
sortStkcdAccper
savexjllb合并,replace
合并结果,如图:
数据超过了65536,数据合并成功。
当需要合并的文件比较多时,特别是成千上百时,将文件名一一复制中程序中会比较麻烦,这时我们要用到logout,先将文件全放在一个文件夹中,再将文件名输出到excel或word中,再将所有文件名复制到程序即可。
例子如下:
setmoreoff
cdC:
\Users\Administrator\Desktop\财务数据\201X-201X
logout,replacesave(myfile)excelword:
dir
use201X.dta,clear
#delimit;
appendusing
201X.dta
201X.dta
201X.dta
201X.dta
201X.dta
201X.dta
201X.dta
201X.dta
201X.dta
201X.dta;
save社保,replace;
logout出的文件名如下:
将文件名复制到程序中即可
2、横向合并
比如:
我们需要201X-201X年利润表和资产负债表的数据,先从国泰安中下载201X-201X年利润表和资产负债表的数据,数据也分别在两个表中,先纵向合
并,存为lrb合并.dta和zcfzb合并.dta,接下来做横向合并,如下:
use"C:
\Users\Administrator\Desktop\财务数据(国泰安)\lrb合并.dta",clearuse"C:
\Users\Administrator\Desktop\财务数据(国泰安)\zcfzb合并.dta",clearcd"C:
\Users\Administrator\Desktop\财务数据(国泰安)"
mergem:
nStkcdAccperusing"C:
\Users\Administrator\Desktop\财务数据(国泰安)\lrb合并.dta"
drop_m
sortStkcdAccper
save合并数据,replace
匹配结果,如下:
篇三:
stata回归分析完整步骤-吐血推荐
stata回归分析完整步骤——吐血推荐
****下载连乘函数prod,方法为:
finditdm71
sortstkcddate//对公司和日期排序
genr1=1+r//r为实际公司的股票收益率
genr2=1+r_yq//r_yq为公司的预期股票收益率
egenr3=prod(r1),by(stkcddate)//求每个公司事件日的累计复合收益率
egenr4=prod(r2),by(stkcddate)//求每个公司事件日的累计预期的复合收益率genr=r4-r3
captureclear(清空内存中的数据)
capturelogclose(关闭所有打开的日志文件)
setmem128m(设置用于stata使用的内存容量)
setmoreoff(关闭more选项。
如果打开该选项,那么结果分屏输出,即一次只输出一屏结果。
你按空格键后再输出下一屏,直到全部输完。
如果关闭则中间不停,一次全部输出。
)setmatsize4000(设置矩阵的最大阶数。
我用的是不是太大了?
)
cdD:
(进入数据所在的盘符和文件夹。
和dos的命令行很相似。
)
logusing(文件名).log,replace(打开日志文件,并更新。
日志文件将记录下所有文件运行后给出的结果,如果你修改了文件内容,replace选项可以将其更新为最近运行的结果。
)
use(文件名),clear(打开数据文件。
)
(文件内容)
logclose(关闭日志文件。
)
exit,clear(退出并清空内存中的数据。
)
假设你清楚地知道所需的变量,现在要做的是检查数据、生成必要的数据并形成数据库供将来使用。
检查数据的重要命令包括codebook,su,ta,des和list。
其中,codebook提供的信息最全面,缺点是不能使用if条件限制范围,所以,有时还要用别的帮帮忙。
su空格加变量名报告相应变量的非缺失的观察个数,均值,标准差,最小值和最大值。
ta空格后面加一个(或两个)变量名是报告某个变量(或两个变量二维)的取值(不含缺失值)的频数,比率和按大小排列的累积比率。
des后面可以加任意个变量名,只要数据中有。
它报告变量的存储的类型,显示的格式和标签。
标签中一般记录这个变量的定义和单位。
list报告变量的观察值,可以用if或in来限制范围。
所有这些命令都可以后面不加任何变量名,
报告的结果是正在使用的数据库中的所有变量的相应信息。
说起来苍白无力,打开stata亲自实验一下吧。
顺带说点儿题外话。
除了codebook之外,上述统计类的命令都属于r族命令(又称一般命令)。
执行后都可以使用returnlist报告储存在r()中的统计结果。
最典型的r族命令当属summarize。
它会把样本量、均值、标准差、方差、最小值、最大值、总和等统计信息储存起来。
你在执行su之后,只需敲入returnlist就可以得到所有这些信息。
其实,和一般命令的return命令类似,估计命令(又称e族命令)也有ereturn命令,具有报告,储存信息的功能。
在更复杂的编程中,比如对回归分解,计算一些程序中无法直接计算的统计量,这些功能更是必不可少。
检查数据时,先用codebook看一下它的值域和单位。
如果有-9,-99这样的取值,查一下问卷中对缺失值的记录方法。
确定它们是缺失值后,改为用点记录。
命令是replace(变量名)=.if(变量名)==-9。
再看一下用点记录的缺失值有多少,作为选用变量的一个依据。
得到可用的数据后,我会给没有标签的变量加上注解。
或者统一标签;或者统一变量的命名规则。
更改变量名的命令是ren(原变量名)空格(新变量名)。
定义标签的命令是labelvar(变量名)空格”(标签内容)”。
整齐划一的变量名有助于记忆,简明的标签有助于明确变量的单位等信息。
如果你需要使用通过原始变量派生出的新变量,那么就需要了解gen,egen和replace这三个命令。
gen和replace常常在一起使用。
它们的基本语法是gen(或replace)空格(变量名)=(表达式)。
二者的不同之处在于gen是生成新变量,replace是重新定义旧变量。
虚拟变量是我们常常需要用到的一类派生变量。
如果你需要生成的虚拟变量个数不多,可以有两种方法生成。
一种是简明方法:
gen空格(变量名)=((限制条件))[这外面的小括弧是命令需要的,里面的小括弧不是命令需要的,只是说明“限制条件”并非命令]。
如果某个观察满足限制条件,那么它的这个虚拟变量取值为1,否则为0。
另一种要麻烦一点。
就是
gen(变量名)=1if(取值为一限制条件)
replace(相同的变量名)=0if(取值为零的限制条件)
两个方法貌似一样,但有一个小小的区别。
如果限制条件中使用的变量都没有任何缺失值,那么两种方法的结果一样。
如果有缺失值,第一种方法会把是缺失值的观察的虚拟变量都定
义为0。
而第二种方法可以将虚拟变量的取值分为三种,一是等于1,二是等于0,三是等于缺失值。
这样就避免了把本来信息不明的观察错误地纳入到回归中去。
下次再讲如何方便地生成成百上千个虚拟变量。
大量的虚拟变量往往是根据某个已知变量的取值生成的。
比如,在某个回归中希望控制每个观察所在的社区,即希望控制标记社区的虚拟变量。
社区数目可能有成百上千个,如果用上次的所说的方法生成就需要重复成百上千次,这也太笨了。
大量生成虚拟变量的命令如下;ta(变量名),gen((变量名))
第一个括号里的变量名是已知的变量,在上面的例子中是社区编码。
后一个括号里的变量名是新生成的虚拟变量的共同前缀,后面跟数字表示不同的虚拟变量。
如果我在这里填入d,那么,上述命令就会新生成d1,d2,等等,直到所有社区都有一个虚拟变量。
在回归中控制社区变量,只需简单地放入这些变量即可。
一个麻烦是虚拟变量太多,怎么简单地加入呢?
一个办法是用省略符号,d*表示所有d字母开头的变量,另一法是用破折号,d1-d150表示第一个到第150个社区虚拟变量(假设共有150个社区)。
还有一种方法可以在回归中直接控制虚拟变量,而无需真的去生成这些虚拟变量。
使用命令areg可以做到,它的语法是
areg(被解释变量)(解释变量),absorb(变量名)
absorb选项后面的变量名和前面讲的命令中第一个变量名相同。
在上面的例子中即为社区编码。
回归的结果和在reg中直接加入相应的虚拟变量相同。
生成变量的最后一招是egen。
egen和gen都用于生成新变量,但egen的特点是它更强大的函数功能。
gen可以支持一些函数,egen支持额外的函数。
如果用gen搞不定,就得用egen想办法了。
不过我比较懒,到现在为止只用用取平均、加和这些简单的函数。
有的时候数据情况复杂一些,往往生成所需变量不是非常直接,就需要多几个过程。
曾经碰到原始数据中记录日期有些怪异的格式。
比如,1991年10月23日被记录为19911023。
我想使用它年份和月份,并生成虚拟变量。
下面是我的做法:
genyr=int(date)
genmo=int((data-yr*10000)/100)
tayr,gen(yd)
tamo,gen(md)
假设你已经生成了所有需要的变量,现在最重要的就是保存好你的工作。
使用的命令是save空格(文件名),replace。
和前面介绍的一样,replace选项将更新你对数据库的修改,所以一定要小心使用。
最好另存一个新的数据库,如果把原始库改了又变不回去,就叫天不应叫地不灵了。
前面说的都是对单个数据库的简单操作,但有时我们需要改变数据的结构,或者抽取来自不同数据库的信息,因此需要更方便的命令。
这一类命令中我用过的有:
改变数据的纵横结构的命令reshape,生成退化的数据库collapse,合并数据库的命令append和merge。
纵列(longitudinal)数据通常包括同一个行为者(agent)在不同时期的观察,所以处理这类数据常常需要把数据库从宽表变成长表,或者相反。
所谓宽表是以每个行为者为一个观察,不同时期的变量都记录在这个观察下,例如,行为者是厂商,时期有201X、201X年,变量是雇佣人数和所在城市,假设雇佣人数在不同时期不同,所在城市则不变。
宽表记录的格式是每个厂商是一个观察,没有时期变量,雇佣人数有两个变量,分别记录201X年和201X年的人数,所在城市只有一个变量。
所谓长表是行为者和时期共同定义观察,在上面的
例子中,每个厂商有两个观察,有时期变量,雇佣人数和所在城市都只有一个,它们和时期变量共同定义相应时期的变量取值。
在上面的例子下,把宽表变成长表的命令格式如下:
reshapelong(雇佣人数的变量名),i((标记厂商的变量名))j((标记时期的变量名))因为所在城市不随时期变化,所以在转换格式时不用放在reshape
long后面,转换前后也不改变什么。
相反地,如果把长表变成宽表则使用如下命令
reshapewide(雇佣人数的变量名),i((标记厂商的变量名))j((标记时期的变量名))唯一的区别是long换成了wide。
collapse的用处是计算某个数据库的一些统计量,再把它存为只含有这些统计量的数据库。
用到这个命令的机会不多,我使用它是因为它可以计算中位数和从1到99的百分位数,这些统计量在常规的数据描述命令中没有。
如果要计算中位数,其命令的语法如下collapse(median)((变量名)),by((变量名))
生成的新数据库中记录了第一个括号中的变量(可以是多个变量)的中位数。
右面的by选项是根据某个变量分组计算中位数,没有这个选项则计算全部样本的中位数。
合并数据库有两种方式,一种是增加观察,另一种是增加变量。
第一种用append,用在两个数据库的格式一样,但观察不一样,只需用append空格using空格(文件名)就可以狗尾续貂了。
简单明了,不会有什么错。
另一种就不同了,需要格外小心。
如果两个数据库中包含共同的观察,但是变量不同,希望从一个数据库中提取一些变量到另一个数据库中用merge。
完整的命令如下:
use
(文件名)
[打开辅助数据库]
sort(变量名)
[根据变量排序,这个变量是两个数据库共有的识别信息]
save(文件名),
replace
[保存辅助数据库]
use
(文件名)
[打开主数据库]
sort(变量名)
[对相同的变量排序]
merge(变量名)using(文件名),keep((变量名))
[第一个变量名即为前面sort后面的变量名,文件名是辅助数据库的名字,后面的变量名是希望提取的变量名]
ta
_merge
[显示_merge的取值情况。
_merge等于1的观察是仅主库有的,等于2的是仅辅助库有的,等于3是两个库都有的。
]
dropif
_merge==2
[删除仅仅来自辅助库的观察]
drop
merge
[删除_merge]
save(文件名),
replace
[将合并后的文件保存,通常另存]
讲到这里似乎对于数据的生成和处理应该闭嘴了。
大家可能更想听听估计、检验这些事情。
但我并不想就此止住,因为实际中总是有一些简单套用命令无法轻易办到的特殊要求。
此时至少有两条路可以通向罗马:
一是找到更高级的命令一步到位;二是利用已知简单命令多绕几个圈子达到目的。
下面讲一个令我刻骨铭心的经历,这也是迄今我所碰到的生成新数据中最繁复的了。
原始数据中包含了可以识别属于同一个家庭中所有个人的信息和家庭成员与户主关系的信息。
目的是利用这些信息建立亲子关系。
初步的构想是新数据库以子辈为观察,找到他们的父母,把父母的变量添加到每个观察上。
我的做法如下:
use
a1,clear
[打开全部样本数据库]
keepif
gender==2&agemos>=96&a8~=1&line<10
[保留已婚的一定年龄的女性]
replacea5=1if
a5==0
篇四:
STATA课件
数据的初始化
一、.xls文件在STATA中的应用的注意事项:
(1)将hebufen.xls文件只能复制到软件中去,在复制的时候将第一行设置为变量行;
(2)变量行中不能有中文否则就不能变成变量行。
二、文件的导入、保存和导出、使用
(一)文件的导入与保存建议:
将文件导入软件后保存为软件能识别的格式,默认的格式是dta,建议用.dta
将hebufen.xls文件复制到软件中去,在复制的时候将第一行设置为变量行后保存为软件能识别的格式以后保存为he。
*程序如下:
(1)将文件放入默认的文件夹中
savehe
*
(2)将文件保存在指定位置
save"C:
\DocumentsandSettings\Administrator\桌面\sas和stata课件\stata课件\control"*
(二)文件的导出、使用
*1、输出文件程序——注:
导出的是正在使用的文件。
outsheetusing"C:
\DocumentsandSettings\Administrator\桌面\sas和stata课件\stata课件\yu.xls
*2、使用stata格式的数据——必须是stata格式的,也就是stata保存下来的文件
usehe,clear
*或
use"C:
\DocumentsandSettings\Administrator\桌面\sas和stata课件\stata课件\control",clear
*3、已有数据的查看——对汉字识别不行
use"C:
\DocumentsandSettings\Administrator\桌面\sas和stata课件\stata课件\control",clearlistxuhao-indcdin1/78ifindcd==3
数据管理
一、stata的通用命令结构
1、【prefix:
】command【变量】【=exp】【ifexp】【usefliename/using】【inrang】
【,options】
2、stata变量原则:
(1)字母的组成由A-Z;a-z;0-9;下划线这些之外的其他符号不可以出现在变量中;
(2)变量不能用数字作为开始;
(3)区分大小写。
3、stata中变量的更名与排序
(1)stata中变量的更名的命令是rename
/*如*/
use"C:
\DocumentsandSettings\Administrator\桌面\sas和stata课件\stata课件\control",clear
renamenindcdni
save,replace
*
(2)变量名的排序命令为order
*如
ordernixhusoaktdc
*4、stata中数据排序*
(1)向上排序命令为sort
*如
use"C:
\DocumentsandSettings\Administrator\桌面\sas和stata课件\stata课件\control",clear
sortxuhao
*
(2)向下排序命令为gsort
*如
use"C:
\DocumentsandSettings\Administrator\桌面\sas和stata课件\stata课件\control",clear
gsort-xuhao
*(3)混合排序程序如下
use"C:
\DocumentsandSettings\Administrator\桌面\sas和stata课件\stata课件\control",clear
gsort-indcd+stkcd
*二、stata的表达式
*
(1)算术符号*加号+减号-乘号*除号/乘方∧开根号如555∧(1/5)
*
(2)关系符号*“==”等于“~=”或“!
=”不等于“<”小于“>”大于“<=”小于等于“>=”大于等于*
(2)逻辑符号
*“&”与“|”或者“~”否定
*四、stata中生成新变量与变量赋值(虚拟变量的设置可以综合使用这几种命令)
*
(1)生成新变量与变量赋值可以有三个命令:
generate(缩写gen)和replace、recode,其中replace、*recode是修改现有变量的取值或赋值但不生成新的变量。
*程序如下
use"C:
\DocumentsandSettings\Administrator\桌面\sas和stata课件\stata课件\control",clear
gensx=stkcd/xuhao
genx=log(xuhao)
geny=ln(xuhao)
replacesx=0ifsx==.
*
(2)recode命令可以重新定义变量的取值,如将一组不同的数字设置为相同的数字
*程序如下:
use"C:
\DocumentsandSettings\Administrator\桌面\sas和stata课件\stata课件\control",clear
recodeindcdmin/3=14/5=26/max=3
*(3)使用egen
*egen也是生成新变量,但是它和gen有一定的区别,egen既能针对所有观察个案,也可以针对单一观察*个案中的多个变量
*下面就举例来说明下:
use"C:
\DocumentsandSettings\Administrator\桌面\sas和stata课件\stata课件\control",clear
geninsum=sum(indcd)
egensum=sum(indcd)
sortindcd
byindcd:
egenstkcdmean=mean(stkcd)
*五、数据的选择
*
(一)保留或是删除观察个案
use"C:
\DocumentsandSettings\Administ