版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章数据管理主要内容变量和变量的取值 创建一个新的数据集
导入已创建的数据集 Stata中的表达式 Stata中的常用函数 使用in、if和by语句定义数据子集 主要内容变量的相关操作 数值和字符串的转换 生成分类变量和虚拟变量 数据的整理2.1.1数据结构和命名规则表2-1数据结构变量名称 变量1 变量2 变量3 变量4 ……观测案例1 变量取值……观测案例2 观测案例3 观测案例4Stata的命名原则:变量名可达32个字符;字符组成部分为A~Z、a~z、0~9与下划线“_”,这些字符之外的其他符号不可以出现在变量名中;变量名不能以数字开头,所以5shanghai是不合法的,而shanghai5是非法的;变量名区分大小写,所以shanghai和Shanghai以及ShangHai是三个不同的变量名。 2.1.2变量的取值类型字符型数据:存储格式是str#,其中str表示Stata使用字符型变量的格式,而#表示Stata该变量的存储最多可容纳的字符数。数值型数据缺失数据:Stata有27个数值型代码:.、.a、.b、.c、.d、…….z。保存类型占用字节最小值最大值字节(byte)1-127100整数(int)2-32,76732,740长整数(long)4-2,147,483,6472,147,483,620浮点(float)4-1.70141173319×10381.70141173319×1038双浮点(double)8-8.9984656743×103078.9984656743×103072.1.3变量的显示数值变量的显示格式字符变量的显示格式:字符变量的显示格式只有一种。其表达式为%#s。其中,%是一个提示符;#表示显示的字符数,即宽度;s表示字符变量的显示格式。使用format命令规范变量的显示格式为变量规定显示格式:
formatvarlist%fmt
或者
format%fmtvarlist显示变量目前所采用的格式:format[varlist]格式表达式表达式举例12345普通格式%w.dg%w.dgc%9.0g%9.2gc1.41421.41421234512,345固定格式%w.df%w.dfc%9.4f%9.0fc1.4142112345.000012,345科学指数%w.de%9.2f1.41e+001.23e+042.1.3变量的显示【例2.1】有如表2-4所示的一个数据集format.dta,每个变量在Stata中的显示类型如下:state为%14s表名美国各州的名称,因而是字符型变量;pop为%11.0g表明该州的总人口,是数值型变量;而medage是各州人口的年龄中位数,显示格式是%9.0g,以浮点型方式存储。我们希望将各个变量的显示方式做如下转换:stata%14s——>%-14s(即由右对齐改为左对齐);pop%11.0g——>%12.0gc(增加三位一个的数字分界符);medage%9.0g——>%8.1f(要求显示一位小数)。statepopmedageAlabama389388829.3Alaska40185126.1Arizona271821529.2Arkansas228643530.6California2366790229.9Colorado288996428.6Connecticut310757632Delaware59433829.8Florida974632434.7Georgia546310528.72.1.3变量的显示表2.4数据集format.dta2.1.4变量的标签1.添加数据集的标签使用:labeldata["label"]2.添加变量的标签使用:labelvariablevarname["label"]label为变量数值添加标签的语法包括两部分,首先是定义数值标签(valuelabel):labeldefinelblname#"label"[#"label"...]然后将定义好的数值标签(valuelabel)添加到变量上:labelvaluesvarlist[lblname|.]2.2创建一个新的数据集
2.2.1关于数据集操作的基本命令2.2.1关于数据集操作的基本命令4.describe命令describe[varlist][,memory_options]5.list命令list[varlist][if][in][,options]separator(#)
每隔#行画一条分割线,默认情况是separator(5),
即每隔5行画一条分割线。sepby(varlist)
每当varlist数值发生变化时就画一条分割线。nolabel
显示变量的赋值而不是标签。6.codebook命令codebook[varlist][if][in][,options]举例应用:创建新的数据集auto.dta【例2.2】本例利用2.1.1中所介绍的命令创建表2-9所示的名为auto.dta的数据集。这个数据集共有74个观测值,表2-9列举了部分数据。读者可以使用sysuseauto来查看这个数据,之所以使用sysuse是因为auto.dta是Stata自带的数据集。
表2-9数据集auto.dta(部分数据)makepricempgrep78headtrunkweightlengthturnAMCConcord40992232.511293018640Linc.Versailles134661433.515383020141Merc.Bobcat3829224392580169392.3导入已创建的数据集读取格式为.dta的数据usefilename[,clearnolabel]选项 描述clear 指明即使目前在内存中的数据尚未保存仍然可以用心的数据来
代替它。nolabel 在载入数据时不载入相关的标签,这一选项基本上很少使用。【例2.3】比如我们的数据是存放在D:\data\woold\statafiles\的auto.dta文件,我们现在希望将这个文件载入到Stata中去。2.4Stata中的表达式算术符号Stata中的算术符号有“+”(加)、“—”(减)、“*”(乘)、“/”(除)、“^”(乘方)以及“—”(负号)。关系符号共有六种关系符号,“==”(等于)、“!=”(不等于)、“>”(大于)、“<”(小于)、“>=”(大于等于)、“<=”(小于等于)。其中两个连续的等号“==”标志一种逻辑检验,表示“是否左侧的值与右侧的值相等”,对于Stata而言,一个等号则代表了另外的意思,它表示了“让左边的值与右边的值相等”。逻辑符号通过加入一个或者多个逻辑符号,便可以将一个或多个关系运算符联系起来,Stata中的逻辑运算号有以下几种:“!”(或)、“&”(且)、“|”(非)。2.6使用in、if和by语句定义数据子集2.6.1in的使用commandinrange2.6.2if的使用commandifexp2.6.3by语句的使用byvarlist:stata_cmdbysortvarlist:stata_cmd2.7变量的相关操作2.7.1建立新的变量——generategenerate[type]newva=exp[if][in]2.7变量的相关操作【例2.4】数据集wage.dta是一个关于就业的微观数据集,该数据集共有526个观测值,24个变量,主要变量的情况是:wage表示工资,educ表示教育程度,exper表示工作经验即工作的年数,tenure表示在当前岗位上工作的年数,以上变量都是以年来计量的,接下来的三个虚拟变量nonwhite、female、married分别表示是否是白种人、是否是女性以及是否婚配。下面利用这个数据完成如下5个任务。生成变量educ的平方,并命名为educ2。对educ数值大于9的观测值生成educ与exper的交叉项,新变量的名称为educ_exper。生成exper的对数值,并命名为logexper。生成female与educ的交叉项,并命名为fem_educ。生成educ的根号项并保留整数位。表2-14数据集wage.dta(部分数据)wageeducexpertenurenonwhitefemalemarried3.111200103.212222011311200006844280015.312720018.8169800111181570002.7变量的相关操作2.7.2更改已有的变量——replacereplaceoldvar=exp[if][in][,nopromote]2.7.2更改已有的变量——replace【例2.5】仍然使用数据集wage.dta,这是一个关于就业的微观数据集,共有526个观测值,24个变量,主要变量的情况是:wage表示工资,educ表示教育程度,exper表示工作经验即工作的年数,tenure表示在当前岗位上工作的年数,以上变量都是以年来计量的,接下来的三个虚拟变量nonwhite、female、married分别表示是否是白种人、是否是女性以及是否婚配。这里重点研究educ这个变量,表2-15是educ的赋值表,可以看出在这个调查中,人们的受教育年数从0到18不等,其中完成高中即受教育12年的人数最多,占37.64%。本例的任务是生成一个变量educat,该变量用数字代替受教育的程度,具体来说,0表示受教育年数小于3,1表示受教育年数为4到6年,2表示受教育年数在7到9年,3表示受教育年数在10到12,4表示受教育年数在13到15年,5表示受教育年数在16到18年,表2-15最后一列列出了这些分类。表2.-15受教育年数变量赋值表2.7.2更改已有的变量——replace受教育年数频数频率累积频率新的变量赋值10305.7016.543020.380.38011295.5122.053210.190.5701219837.6459.703310.190.76013397.4167.114430.571.331145310.0877.194510.191.52115213.9981.184661.142.661166812.9394.115740.763.42217122.2896.3958224.187.60218193.61100.0059173.2310.842总计526100.002.7.3egen命令egen[type]newvar=fcn(arguments)[if][in][,options]2.7.3egen命令【例2.6】仍然使用数据集wage.dta,这是一个关于就业的微观数据集,共有526个观测值,24个变量,主要变量的情况是:wage表示工资,educ表示教育程度,exper表示工作经验即工作的年数,tenure表示在当前岗位上工作的年数,以上变量都是以年来计量的,接下来的三个虚拟变量nonwhite、female、married分别表示是否是白种人、是否是女性以及是否婚配。详细情况可以参见表2-10。这里使用这个数据集完成如下5个任务。(1)生成一个新变量educde,其赋值为educ与平均受教育年数之差。(2)生成一个新变量educde2,其赋值为educ与受教育年数中位数之差,这项工作要求分性别进行。(3)生成一个新变量stdeduc,其赋值为标准化后的受教育年数educ。(4)生成一个新变量higheduc,如果educ大于12则higheduc包含这个变量的数值,否则为缺失值。(5)生成一个新变量sexmar,赋值为1、2、3……,这些数值为female和marriage的各种组合编上类别序号。
2.8
数值和字符串的转换2.8.1encode和decode命令字符型变量到数值型变量
encodevarname[if][in],generate(newvar)[label(name)]generate(newvar):此项必须,用于指定新生成的变量的名称,新变量的名
称写在newvar的位置上。label(name):指定新变量使用的标签名,如果不加这一项,那么新变量默认使用语原变量相同的标签,一般这一项可以不使用。数值型变量到字符型变量
decodevarname[if][in],generate(newvar)[maxlength(#)]generate(newvar):此项必须,用于指定新生成的变量的名称,新变量的名称写在newvar的位置上。2.8
数值和字符串的转换【例2.7】表2-19是从一个调查数据中截取的一段观测值,共有七个变量,id是每个变量的识别序号,city是每个观测值所在城市,year是调查年份,age表明被调查者所在的年龄层,race和sex分别表明被调查者的性别和种族。
利用该数据完成如下任务:(1)利用sex变量,生成一个新的数值型变量gender,并使得gender所使用的变量值标签gender的数值分配为1“female”、0“male”。(2)利用新生成的数值型变量gender,将它转换为字符型变量gender2,并比照gender2与sex是否相同。表2-19调查数据观测值idcityyearage_grpracesex82389231199315-19Blackfemale71434701199230-3404680151198825-29Blackmale61671531199125-29Blackmale61425901199120-24Blackfemale73402592199330-34Blackfemale44116041199020-24Blackmale69629505199225-29Blackfemale50123485199120-24Blackfemale31872962199025-29Hispanicfemale2.8
数值和字符串的转换2.9生成分类变量和虚拟变量2.9.1生成虚拟变量使用generate和replace生成虚拟变量【例2.8】仍然使用数据集wage.dta,这是一个关于就业的微观数据集,共有526个观测值,24个变量,主要变量的情况是:wage表示工资,educ表示教育程度,exper表示工作经验即工作的年数,tenure表示在当前岗位上工作的年数,以上变量都是以年来计量的。本例重点研究educ这个变量,我们试图使用generate和replace生成一个虚拟变量college,如果个体读过大学则college=1,否则college=0。使用generatenewvar=(varname>#)生成虚拟变量
generatenewvar=(varname>#)是Stata中生成虚拟变量的快捷方式,在这个命令中,第一个等号表示定义:满足其后小括号中的观测案例将会在新的变量中定义为1,其余的情况则定义为0。2.9.3生成分类变量generate加replace命令组合生成分类变量【例2.9】仍然使用数据集wage.dta,这是一个关于就业的微观数据集,共有526个观测值,24个变量,主要变量的情况是:wage表示工资,educ表示教育程度,exper表示工作经验即工作的年数,tenure表示在当前岗位上工作的年数,以上变量都是以年来计量的。本例重点研究educ这个变量,我们试图使用generate和replace生成一个分类变量educ6将教育水平划分为6个等级,依次是未读书、小学、初中、高中、大学、研究生,并分别赋值0到5。recode命令:recodevarlist(rule)[(rule)...][,generate(newvar)] 常见的赋值规则如下:规则 例子 含义#=# 3=1 3转换为1##=# 2.=9 2和缺失值转换为9#/#=# 1/5=4 1到5转换为4nonmissing=# nonmiss=8 所有非缺失值转换为8missing=# miss=9 所有缺失值转换为92.9.3生成分类变量【例2.10】为了说明recode的使用,我们使用表2-21所示的数据,完成如下任务:(1)改变变量x的赋值,将1变为2,保持其他赋值不变,并将新的变量保存为nx。(2)改变x1的赋值,将1改为2,将2改为1,并将新的变量保存为nx1。(3)改变x2的赋值,由1和2变为1,将3改为2,将4到7改为3并将新的结果保存在nx2。表2-21recode演示数据集xx1x2x312182121321243215432654376548765187621872.9.3生成分类变量使用autocode()、recode()和group()三个函数生成分类变量autocode()、recode()和group()是常用的用于生成分类变量的函数,它们的含义如下所示:autocode(x,n,xmin,xmax)——表示根据x值形成分类变量:将x的值域(即最小值xmin至最大值xmax)分成等距的n份,并求出各x值所在区间的上限。group(x)——建立一个分类变量,将按排序后的数据分为尽量等规模的x个子样本。recode(x,x1,x2,…,xn)——当x缺失时求得缺失值,当x<x1时求得x1,当x<x2时求得x2。【例2.11】仍然使用就业调查数据集wage.dta,这个数据集主要变量的情况是:wage表示工资,educ表示教育程度,exper表示工作经验即工作的年数,tenure表示在当前岗位上工作的年数,以上变量都是以年来计量的。其中,变量exper的取值区间从1到51,本例要求分别使用autocode()、recode()和group()三个函数变量将exper转换为一个分为5组的分类变量。具体的三个要求如下。(1)利用autocode()函数将exper分成九组,各组相等间隔为10年(2)依据观测案例的数目平均分成5组,各个组别在目标变量的排列顺序下包含有相同数目的观测案例(3)要求将exper分成如下区间所定义的5组:[1,5],[6,15],[16,25],[26,40],[41,51]。2.10数据的整理2.10.1数据的横向合并merge[varlist]usingfilename[filename…][,options]merge(newvar):自动生成合并吻合度的记录变量,默认为merge,数值为:0不吻合,只在内存内数据存在的个案1不吻合,只在内存外数据存在的个案2吻合,内存内和内存外数据皆存在的个案。update:内存内的缺失数值可以被内存外数据的相应数值覆盖。replace:内存内的非缺失数值可以被内存外数据的相应数值覆盖。nokeep:去掉内存外数据的非吻合个案,等同于dropifmerge==2。nosummary 合并两个以上数据时,不保留记录变量(即merge)2.10数据的整理【例2.12】现有两个关于汽车市场的调查数据文件,一个是汽车技术层面的数据autotech.dta,见表2-24,其中的变量情况是:make是字符型变量,表明生产厂商,mpg是行驶里程(英里),weight是车身重量(吨),length是车身长度(米);另一个数据是汽车成本层面的数据autocost.dta,见表2-25,其中的变量情况是:make是字符型变量,表明生产厂商,price是汽车的价格(万元),rep78是年度修理次数。现在要求将make作为索引变量将两个数据横向合并在一起。【2.13】有如表2-26和表2-27所示的两个数据集,其中original.dta是主数据,updates.dta是调用数据集,请利用merge将两数据合并在一起,要求如果出现主数据和调用数据不一致的地方则依据调用数据进行修改。2.10.2数据的纵向合并appendusingfilename[,options]keep(varlist):varlist是内存外数据指定保留的变量;当内存外变量数目多余内存内数据的时候,可以只保留内存内的变量。nolabel:不拷贝内存外数据的数值标签,即合并后的数据使用内存内数据的数据标签。nonotes:不拷贝内存外数据的数据说明【例2.14】有两个数据文件odd.dta和even.dta,利用append命令将两者合并。数据的内容将在执行命令的过程中以list命令输出结果的形式给出。【例2.15】数据集auto.dta是Stata系统自带的关于1978年汽车市场的一个调查数据,该数据集共有74个观测值,12个变量。变本例演示如何利用append命令完成如下任务:将auto.dta拆分成两个数据集,一个为国产汽车(即foreign=0),另一个为国外产汽车(即foreign=1),然后将两者合并,并仅保存make、price、mpg、rep78、foreign这五个变量。2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年初级会计职称考试真题及详细答案解析(完整版)
- 压力管道泄漏爆炸事故专项应急处置预案
- 2025年湘教版语文小升初升学模拟试卷(含答案解析)
- 2026年保守国家秘密法考试题及答案
- 门窗安装工程技师试题及答案
- 2025年院前急救医师技能比武试题完整答案
- 物业行业绿化部绿化师园林养护手册(执行版)
- 吉林马团体标准
- 特种设备及特种作业人员安全操作规程汇编
- 2025-2026年电子商务师考试电子商务营销效果评估模拟试题
- 员工岗位安全操作规程模板
- 《信息组织》课程教学大纲
- 数据资产基础知识培训课件
- 【语文】广东省佛山市顺德区北滘镇中心小学小学二年级上册期末试题(含答案)
- 湛江市市区及下辖各镇国有建设用地基准地价更新项目成果汇编及应用指南
- 回流焊的工艺流程
- 职业健康噪声培训
- 《民航地勤服务》电子课件
- 移动机器人原理与技术 课件全套 王晓华 第1-10章 绪论- 移动机器人ROS系统
- DB11T 1456-2017 热电联产(燃气)单位产品能源消耗限额
- 第七届全国茶业职业技能竞赛(茶艺师)理论试题库(含答案)
评论
0/150
提交评论