教学工作的资源分享

第二章-数据管理资料

职教

职教

STATA从入门到精通第二章数据管理第2页

STATA从入门到精通主要内容

变量和变量的取值创建新的数据集导入已创建的数据集Stata公式Stata的一般函数

使用in、if和by语句定义数据的子集第3页STATA从入门到精通主要内容

有关变量的操作数字和字符串的转换生成分类变量和虚拟变量整理数据Page 4

STATA从入门到精通2.1.1数据结构和命名约定表2-1数据结构变量名变量1变量2变量3变量4 .观测情况1变量取值……观测情况2观察情况3观察情况4

Stata命名原则:

1 .变量名最多可包含32个字符

2 .文字的构成部分为A~Z、A~Z、0~9和下划线“_”,这些文字以外的符号无法显示在变量名中;3 .因为变量名不能以数字开头,所以5上海是不合法的,上海5是非法的的;4 .由于变量名是区分大小写的,所以上海和上海有三种不同变量名。第5页

STATA从入门到精通2.1.2变量的值类型

字符数据:存储格式为str#。 其中str表示Stata使用字符变量的格式。#表示Stata变量可以存储的最大字符数。数值型数据

没有数据。 Stata有27个数值类型代码。 a, b, c, d,…….z。保存类型占用字节最小值最大值字节(byte )1 -127 100整数(int )2-32、76732和740

长整数(long )4-2、147、483、647 ) 2、147、483、620浮点(float (4- 1.7014117331910381.701411733191038双浮点(double )8-8.998465674310307 ) 8.998465674310307Page 6STATA从入门到精通2.1.3显示变量数字变量的显示格式

文字变量的显示格式:文字变量的显示格式只有一种。 公式如下%#s。 其中%是提示; #表示显示的字符数或宽度。 s表示字符变量的显示格式。使用format命令指定变量的显示格式,并指定变量的显示格式。

format varlist %fmt或format %fmt varlist显示变量当前使用的格式。 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.2f 1.41e 00 1.23e 04Page 7STATA从入门到精通2.1.3显示变量

【例2.1】有表2-4所示那样的数据集format.dta,各变量在Stata的显示类型如下。 state是s表名称中美国各州的名称,因此是字符类型变量; pop为0g表示该州的总人口为数值型变量; medage是是各州人口的年龄中位数,显示格式为%9.0g,以浮点方式保存。我们希望将每个变量的显示方式转换为以下形式。stata s——%-14s (即从右对齐改为左对齐);pop .0g——.0gc (以三位增量增加数字分隔符);medage %9.0g——%8.1f (需要显示1位小数)。Page 8

STATA从入门到精通状态pop medage

Alabama 3893888 29.3Alaska 401851 26.1Arizona 2718215 29.2Arkansas 2286435 30.6California 23667902 29.9Colorado 2889964 28.6Connecticut 3107576 32Delaware 594338 29.8Florida 9746324 34.7Georgia 5463105 28.72.1.3显示变量表2.4数据集format.dta第9页

STATA从入门到精通2.1.4变量的标签

1 .添加和使用数据集标签:标签数据[ ' label ' ]2 .添加和使用变量标签:label variable varname ['label']label标记变量值的语法由两部分组成。首先,定义数值标签

labeldefinelblname # ' label ' [ # ' label ' . ]然后,将定义的数值标签(value label )添加到变量中。label values varlist [lblname|.]Page 10 STATA从入门到精通

2.2创建新数据集

2.2.1数据集操作的基本命令1 .浏览和编辑命令

edit [varlist] [if] [in] browse [varlist] [if] [in] 2.rename命令rename old_varname new_varname3. save命令

save [filename] [, save_options]nolabel 不保存设定的标签。

replace 允许新的文件覆盖原有文件,这是一个常用的选项。all 主要用于编程,指定将e(sample)与数据一起保存。Page 11 STATA从入门到精通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]Page 12 STATA从入门到精通举例应用:创建新的数据集auto.dta

中专技校

中专技校

这个数据集共有74个观测值,表2-9列举了部分数据。读者可以使用sysuse auto来查看这个数据,之所以使用sysuse是因为auto.dta是Stata自带的数据集。表2-9 数据集auto.dta(部分数据)

make price mpg rep78 head trunk weight length turnAMC Concord 4099 22 3 2.5 11 2930 186 40Linc. Versailles

13466 14 3 3.5 15 3830 201 41

Merc. Bobcat 3829 22 4 3 9 2580 169 39Page 13 STATA从入门到精通2.3导入已创建的数据集读取格式为.dta的数据

use filename [, clear nolabel]选项 描述clear 指明即使目前在内存中的数据尚未保存仍然可以用心的数据来代替它。

nolabel在载入数据时不载入相关的标签,这一选项基本上很少使用。【例2.3】比如我们的数据是存放在D:\data\woold\statafiles\的auto.dta文件,我们现在希望将这个文件载入到Stata中去。Page 14 STATA从入门到精通2.4 Stata中的表达式◼算术符号

Stata中的算术符号有“+”(加)、“—”(减)、“*”(乘)、“/”(除)、“^”(乘方)以及“—”(负号)。◼关系符号

共有六种关系符号,“==”(等于)、“!=”(不等于)、“>”(大于)、“<”(小于)、“>=”(大于等于)、“<=”(小于等于)。其中两个连续的等号“==”标志一种逻辑检验,表示“是否左侧的值与右侧的值相等”,对于Stata而言,一个等号则代表了另外的意思,它表示了“让左边的值与右边的值相等”。◼逻辑符号

通过加入一个或者多个逻辑符号,便可以将一个或多个关系运算符联系起来,Stata中的逻辑运算号有以下几种:“!”(或)、“&”(且)、“|”(非)。Page 15 STATA从入门到精通2.6使用in、if和by语句定义数据子集2.6.1 in的使用

command in range2.6.2 if的使用command if exp2.6.3 by语句的使用

by varlist: stata_cmdbysort varlist: stata_cmdPage 16 STATA从入门到精通2.7 变量的相关操作2.7.1建立新的变量——generate

generate [type] newva=exp [if] [in]Page 17 STATA从入门到精通2.7 变量的相关操作

【例2.4】数据集wage.dta是一个关于就业的微观数据集,该数据集共有526个观测值,24个变量,主要变量的情况是:wage表示工资, educ表示教育程度, exper表示工作经验即工作的年数,tenure表示在当前岗位上工作的年数,以上变量都是以年来计量的,接下来的三个虚拟变量nonwhite、female、married分别表示是否是白种人、是否是女性以及是否婚配。◼ 下面利用这个数据完成如下5个任务。1. 生成变量educ的平方,并命名为educ2。

2. 对educ数值大于9的观测值生成educ与exper的交叉项,新变量的名称为educ_exper。

3. 生成exper的对数值,并命名为logexper。4. 生成female与educ的交叉项,并命名为fem_educ。5. 生成educ的根号项并保留整数位。Page 18 STATA从入门到精通

◼ 表2-14 数据集wage.dta(部分数据)

wage educ exper tenure nonwhite female married3.1 11 2 0 0 1 0

3.2 12 22 2 0 1 13 11 2 0 0 0 06 8 44 28 0 0 15.3 12 7 2 0 0 18.8 16 9 8 0 0 111 18 15 7 0 0 02.7 变量的相关操作Page 19 STATA从入门到精通2.7.2更改已有的变量——replace

◼ replace oldvar =exp [if] [in] [, nopromote]Page 20 STATA从入门到精通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最后一列列出了这些分类。Page 21 STATA从入门到精通◼ 表2.-15 受教育年数变量赋值表2.7.2更改已有的变量——replace受教育年数

频数 频率 累积频率新的变量赋值

10 30 5.70 16.54 3

0 2 0.38 0.38 0 11 29 5.51 22.05 32 1 0.19 0.57 0 12 198 37.64 59.70 33 1 0.19 0.76 0 13 39 7.41 67.11 44 3 0.57 1.33 1 14 53 10.08 77.19 45 1 0.19 1.52 1 15 21 3.99 81.18 46 6 1.14 2.66 1 16 68 12.93 94.11 57 4 0.76 3.42 2 17 12 2.28 96.39 58 22 4.18 7.60 2 18 19 3.61 100.00 59 17 3.23 10.84 2 总计 526 100.00Page 22 STATA从入门到精通2.7.3 egen命令

◼ egen [type] newvar = fcn(arguments) [if] [in] [, options]Page 23 STATA从入门到精通2.7.3 egen命令

【例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的各种组合编上类别序号。Page 24 STATA从入门到精通2.8 数值和字符串的转换

2.8.1 encode和decode命令字符型变量到数值型变量

encode varname [if] [in] , generate(newvar) [label(name)]◼ generate(newvar) :此项必须,用于指定新生成的变量的名称,新变量的名 称写在newvar的位置上。◼ label(name):指定新变量使用的标签名,如果不加这一项,那么新变量默认使用语原变量相同的标签,一般这一项可以不使用。

数值型变量到字符型变量

decode varname [if] [in] , generate(newvar) [maxlength(#)]◼ generate(newvar):此项必须,用于指定新生成的变量的名称,新变量的名称写在newvar的位置上。Page 25 STATA从入门到精通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是否相同。Page 26 STATA从入门到精通◼ 表2-19 调查数据观测值id city year age_grp race sex8238923 1 1993 15 - 19 Black female7143470 1 1992 30 - 34

0468015 1 1988 25 - 29 Black male6167153 1 1991 25 - 29 Black male6142590 1 1991 20 - 24 Black female7340259 2 1993 30 - 34 Black female4411604 1 1990 20 - 24 Black male6962950 5 1992 25 - 29 Black female5012348 5 1991 20 - 24 Black female3187296 2 1990 25 - 29 Hispanic female2.8 数值和字符串的转换Page 27 STATA从入门到精通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。◼ 使用generate newvar=(varname>#)生成虚拟变量generate newvar=(varname>#)是Stata中生成虚拟变量的快捷方式,在这个命令中,第一个等号表示定义:满足其后小括号中的观测案例将会在新的变量中定义为1,其余的情况则定义为0。Page 28 STATA从入门到精通2.9.3生成分类变量

◼ generate加replace命令组合生成分类变量

【例2.9】仍然使用数据集wage.dta,这是一个关于就业的微观数据集,共有526个观测值,24个变量,主要变量的情况是:wage表示工资, educ表示教育程度, exper表示工作经验即工作的年数,tenure表示在当前岗位上工作的年数,以上变量都是以年来计量的。本例重点研究educ这个变量,我们试图使用generate和replace生成一个分类变量educ6将教育水平划分为6个等级,依次是未读书、小学、初中、高中、大学、研究生,并分别赋值0到5。◼ recode命令: recode varlist (rule) [(rule) ...] [, generate(newvar)]常见的赋值规则如下:

规则 例子 含义

#=# 3=1 3 转换为 1

# # = # 2 .=9 2和缺失值转换为9#/# = # 1/5 = 4 1到5转换为4

nonmissing= # nonmiss =8 所有非缺失值转换为8missing = # miss =9 所有缺失值转换为9Page 29 STATA从入门到精通2.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。Page 30 STATA从入门到精通◼ 表2-21 recode演示数据集x x1 x2 x3

1 2 1 82 1 2 13 2 1 24 3 2 15 4 3 26 5 4 37 6 5 48 7 6 51 8 7 62 1 8 72.9.3生成分类变量

Page 31 STATA从入门到精通

使用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【例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]。Page 33 STATA从入门到精通2.10数据的整理

2.10.1数据的横向合并

merge [varlist] using filename [filename …] [,options]◼ merge(newvar):自动生成合并吻合度的记录变量,默认为merge,数值为:

◼ 0不吻合,只在内存内数据存在的个案◼ 1不吻合,只在内存外数据存在的个案◼ 2吻合,内存内和内存外数据皆存在的个案。

◼ update:内存内的缺失数值可以被内存外数据的相应数值覆盖。◼ replace:内存内的非缺失数值可以被内存外数据的相应数值覆盖。◼ nokeep:去掉内存外数据的非吻合个案,等同于drop if merge==2。◼ nosummary 合并两个以上数据时,不保留记录变量(即merge)Page 34 STATA从入门到精通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将两数据合并在一起,要求如果出现主数据和调用数据不一致的地方则依据调用数据进行修改。

Page 35 STATA从入门到精通2.10.2数据的纵向合并

◼ append using filename [,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这五个变量。Page 36 STATA从入门到精通2.10.3数据的交叉合并1. 用joinby进行组内交叉

joinby [varlist] using filename [,options]选项(options)说明◼ 当样本吻合时

update 内存内的缺失数值可以被内存外数据相同变量的相应数值覆盖。replace内存内的所有数值被内存外数据相同变量的相应数值覆盖。unmatched(none) 不保留非吻合样本,默认选项unmatched(both) 两个数据的非吻合样本都保留unmatched(master) 只保留内存内数据非吻合样本unmatched(using) 只保留内存外数据非吻合样本merge(newvar)自动生成合并吻合度的记录变量,默认为mergenolabel不拷贝内存外数据的数值标签Page 37 STATA从入门到精通

◼ 【例2.16】在以家庭为单位的研究中,我们同时有父母的数据和小孩的数据,如果一个家庭有2个父母和2个小孩,那么父母与孩子的交叉后有2×2个样本。我们以家庭编号为索引变量将父母的数据和孩子的数据进行合并就可以得到各种可能的亲子关系。表2-31是父母的数据(parent.dta),表2-32是小孩的数据(child.dta),请利用joinby进行组内交叉得到亲子关系数据。◼ 表2-31父母的数据(parent.dta)family_id parent_id x1 x31030 10 39 600

1025 11 20 6431025 12 27 7211026 13 30 7601026 14 26 6681030 15 32 6842.10.3数据的交叉合并Page 38 STATA从入门到精通◼ 表2-32小孩的数据(child.dta)family_id child_id x1 x21025 3 11 3201025 1 12 3001025 4 10 2751026 2 13 2801027 5 15 2102.10.3数据的交叉合并Page 39 STATA从入门到精通2. 用cross进行一一交叉

cross using filenamePage 40 STATA从入门到精通2. 用cross进行一一交叉

【例2.17】数据集sex.dta是一个关于性别的数据(表2-33),数据集agecat.dta是一个关于年龄的数据(表2-34),请利用cross命令将它们进行一一交叉合并。表2-33 数据集sex.dtasex

male

female

表2-34 数据集agecat.dtaagecat203040

Page 41 STATA从入门到精通2.10.4数据的抽取

sample # [if] [in] [, count by(groupvars)] 【2.18】下面以wage.dta数据为例进行数据的重新抽取,请利用sample命令完成如下四个任务:1.在数据中简单随机抽样,抽取10个观测值,并罗列wage、 female、married这三个变量。

2.在女性数据中抽取10个样本并保留所有男性样本。3.在男性和女性样本中各抽取10个样本。4.对female和married的各种组合各抽取5个样本。42End of This Chapter.

随机看看

NEW ARTICLE

标签

Tag