好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

stata中变量的生成与处理.ppt

29页
  • 卖家[上传人]:re****.1
  • 文档编号:588879872
  • 上传时间:2024-09-09
  • 文档格式:PPT
  • 文档大小:246.52KB
  • / 29 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第四章变量的生成与处理变量的生成与处理 导论•Stata 对数据的处理是以变量为前提的•若没有需要分析的变量,则Stata将一无用处•熟悉变量的内容和分布、生成新变量、改变旧变量等是处理数据的第一步 4.1. 新变量的生成、规则及注意事项 Stata的变量类型•Stata软件生成三类变量:numeric(数值型)变量,string(字符型)变量(相当于定性变量)和date(日期)变量虽然日期变量以数值型变量的技术记录、存储,但二者的用途却不同•数值型变量包括定距和定比变量可以是整数、小数、负数和正数数值型变量可以有多种存储方式( Storage Types)•用str类型保存的定性等分类变量也可区分为多种形式,从str1-str244 Stata的日期变量•日期(date)变量是数值型变量的一个特例它们通常以字符的形式输入(如: 01JAN1992 or 01/01/92),但必须以数值型数据存储才能有用•Stata有几个命令可以工作于日期和时间依赖(time-dependent)数据•Stata将所有的日期保存为从1960年1月1日以来的天数或月份、季节等此前的日期是负值,此后的是正值。

      SAS使用同样的日期方式,但其起始时间是1582年的10月14日Excel使用1900年1月1日为默认起始日如果读入Excel数据,则以字符型变量输入日期,并重新格式日期 生成变量的路径Data — Create or change variables 生成变量的窗口Data — Create or change variables — Create new variable 基本命令Stata有四个基本的生成和修改变量的命令:gen、egen、replace和recode•. gen和egen分别是generate和extended generate的缩写,它们用于生成新变量•. replace和recode用来改变现存变量的属性或数值•. replace需要与gen一起使用;二者的区别在于,gen用于生成新变量,replace用于重新定义已经存在的变量•. recode也可以与gen一起使用 基本语法 . gen [变量名] = [表达式1] ① ② ③. replace [变量名] = [表达式2] if [条件] ① ② ③ ④①:生成新变量或替代现存变量取值的基本命令②:新变量或其取值将被替换的变量的名称③:在gen命令的取值不同于在replace命令的取值④:替换原有变量的取值必须满足if指定的条件 *yr of schooling recoded(这是一(这是一个注释;个注释;*代表注释)代表注释)gen edu=0replace edu=1 if yrsch==11replace edu=2 if yrsch==12replace edu=3 if yrsch==13replace edu=4 if yrsch==14replace edu=5 if yrsch==15replace edu=6 if yrsch==16replace edu=7 if yrsch==21replace edu=8 if yrsch==22replace edu=9 if yrsch==23replace edu=10 if yrsch==24 | yrsch==27replace edu=11 if yrsch==25 | yrsch==28replace edu=12 if yrsch==26 | yrsch==29replace edu=13 if yrsch==31replace edu=14 if yrsch==32replace edu=15 if yrsch==33replace edu=16 if yrsch==34replace edu=17 if yrsch==35replace edu=18 if yrsch==36replace edu=. if yrsch==. | yrsch==-9tab1 yrsch edu*查看变量的生成是否成功查看变量的生成是否成功 变量生成的规则(I) 生成新变量、重新定义旧变量时需遵循的一些基本规则:•变量的名称可长达32个字符,必须以字母、汉字或字符(@,_,#,$等)开头(不能使用空白字符或!、?等特殊字符)。

      变量最后一个字符不能是句号•变量的名称必须唯一,不能有两个相同的变量名•Stata区分大小写,对大写、小写敏感:Variable 不能写成 variable,反之亦然•使用描述性的变量名字:使用描述性的变量名字:“变量变量a”这个名称没有任何意义这个名称没有任何意义调查问题是变量名称的很好选择调查问题是变量名称的很好选择 变量生成的注意事项 •尽量避免使用同一变量名称换言之,不要使用新变量取代旧变量保持原始变量有助于检验我们的命令是否正确•充分了解原始变量的分布以及每个数值代表的含义•遵循不重不漏(exhaustive and mutually exclusive)原则(详见“生成分组变量”一节)•在变量生成后,将原始变量和新变量的取值进行对比,检查是否有误•注意原始变量的缺失值 4.2.利用系统变量或下划线变量(_n和_N)生成新变量 Stata有几个下划线变量(_variables,读为“underscore variables”),因包含下划线而得名这类变量并不出现在Stata的Variables(变量)窗口中,故又称系统变量其中,经常使用的有_n 和_N系统变量_n 和_N对于数据的管理和处理十分有用,尤其是与特殊选项by同时使用时 系统变量 _n•_n 是指当前当前的观察值,即独一无二的观测序号,从1到_N(_N=总样本)•_n是Stata系统内部独特的辨识器,标志从第一个观察值开始直到最后一个观察值(_N)的序列•_n=1为第一个观测,_n=2为第二个观测,…,_n=_N是最后一个观测•该系统变量适于(1)指示观察值;(2)生成系列数值;(3)生成其他变量 使用系统变量_n指示观察值•系统变量_n表示每个观察值的位置(numbering observations)。

      其原则是:当前观察值:[_n] 总观察值(最后一个观察值[_n]):[_N]第一个观察值:[1] 最后一个观察值:[_N] 滞后一个(lag)观察值:[_n-1] 前移一个(lead)观察值:[_n+1] 第27个观察值:[27] •假如现有以下数据: +----------------------------------------------------------+ | province personid homesize age girl siblings | (省份) (个人ID)(家庭规模)(年龄)(女孩)(姊妹数量) |----------------------------------------------------------| 1. | 21 2106018504 50 5 girl 1 | 2. | 35 3505154103 100 18 boy 0 | 3. | 32 3205093703 246 8 boy 0 | 4. | 37 3708156203 60 9 boy 0 | 5. | 45 4452082404 20 6 girl 3 | 6. | 35 3501117305 25 13 girl 2 | 7. | 45 4526057606 90 10 girl 3 | 8. | 32 3209163903 25 2 boy 0 | 9. | 37 3702093304 68 7 boy 1 | 10. | 37 3704057503 80 20 boy 3 | +----------------------------------------------------------+•现在想看看每个孩子在省内的排序 使用系统变量_n生成新变量•步骤步骤1:对province(即“关键变量”)进行排序. sort province•步骤步骤2:生成感兴趣的变量 . by province: gen order =_n ① ② ③ ④①:按province的分类进行排序和计算②:生成新变量的基本命令③:新变量的名称④:新变量的取值等于同一province内观察值的序次•步骤步骤3:使用频数分布查看生成的结果是否正确 . tab order 使用系统变量_N生成新变量 •系统变量_N代表样本总数。

      最后一个样本_n即是_N•使用前面的数据,看看每个省共有几个孩子在样本中 •步骤步骤1:对province进行排序•步骤步骤2:生成感兴趣的变量其命令是:. by province: gen ceb=_N •步骤步骤3:查看结果正确与否. tab ceb 生成滞后(lag)变量或移前变量(lead)•在分析某些类型数据(包括常用的家庭成员数据和纵向数据)的过程中,常常需要根据研究问题将一个样本的取值转移到上一个(或下一个)观察值中•. gen a = b[_n-1]. gen a = b[_n+1] ① ② ③①:需要生成的新变量的名称②:现有变量的名称③:将现有变量的取值下移一行([_n-1])或前移一行([_n+1])的基本命令 . gen a = age[_n-1](1 missing value generated). gen b = age[_n+1](1 missing value generated). list +----------------------------------------------------------------------------+ | province personid homesize age girl siblings order a b | |----------------------------------------------------------------------------| 1. | 21 2106018504 50 5 girl 1 1 . . 2 | 2. | 32 3209163903 25 2 boy 0 1 5 8 | 3. | 32 3205093703 246 8 boy 0 2 2 18 | 4. | 35 3505154103 100 18 boy 0 1 8 13 | 5. | 35 3501117305 25 13 girl 2 2 18 9 | 10. | 45 4526057606 90 10 girl 3 2 6 . . | +----------------------------------------------------------------------------+ 4.3.生成数值型变量 使用recode, …, gen命令生成新变量. recode [原变量] ([原变量取值] = [新变量取值]) ① ② ③ ④ *= [其他取值], gen [新变量] ⑤ ⑥ ⑦①:给变量重新赋值的命令②:现有变量的名称③:现有变量的取值 ④:新变量的取值;③和④是一个整体⑤:*符号表示所有其他没有列出的数值,包括缺失值;recode与gen之间有逗号(,)隔开⑥:生成新变量的命令⑦:新变量的名称 •以本章数据中的变量变量“yrsch”为例。

      前面使用gen…replace的方法在“yrsch” 的基础上生成变量“edu”;现在使用另一种简便的方法生成“edu”–由于变量edu已经存在,首先需要删除该变量:. drop edu. recode yrsch 0=0 11=1 12=2 13=3 14=4 15=5 16=6 21=7 22=8 23=9 24 27=10 25 28=11 26 29=12 31=13 32=14 *=.,gen (edu)–该命令在原变量yrsch的基础上生成一个新变量(edu)–新变量对原变量的取值重新编码原变量照旧保存着–若无gen(edu)部分,则仅取代原有变量的取值 使用数学表达式生成新变量 •任何有效的数学表达式在生成变量时都适用既可以是加、减、乘、除的单独表达式,也可以是混合表达式:. gen a = b + c + d •加法:将变量b,c,d的数值累加起来,生成新变量a. gen a = b - c•减法:将变量b的数值减去变量c的数值,得到变量a. gen a2 = a*a•乘法:该命令生成新变量a2;a*a是a x a的表达方式. gen double a = b/c•除法:用变量b的数值 除以变量c的数值,得到新变量a。

      该变量定义为double类型. gen a = b/(c^2) •新变量a的取值等于变量b的取值除以变量c取值的平方 4.4.生成分类变量*age group. gen agegrp=0. replace agegrp=1 if age>=0 & age<=4 . replace agegrp=2 if age>=5 & age<=9 . replace agegrp=3 if age>=10 & age<=14. replace agegrp=4 if age >=15 . replace agegrp=. if age == .. egen agegrp = cut(age), at(0,5,10, 15,20) 4.5.生成虚拟变量(dummy, dichotomous variable) 方法1. gen [新变量名] = b [限制条件] ① ② ③ ④①:生成新变量的基本命令②:新变量名③:旧变量名④ :当b满足某种条件时,生成新变量•比如:. gen xiaoxue = edu<7 或. gen xiaoxue =edu<=6 或. gen byte xiaoxue = edu<7 或. gen byte xiaoxue =edu<=6 方法2 . gen [变量名] =1 if[取值为1的限制条件]. replace([变量名]=0 if[取值为0的限制条件]•比如:. gen xiaoxue = 1 if edu<7–若edu小于7,则xiaoxue等于1. replace xiaoxue =0 if edu >=7 –若edu大于或等于7,则xiaoxue等于0. replace xiaoxue = . if edu == . –若edu等于.,则xiaoxue等于.(缺失) 方法3•虚拟变量往往是根据某(几)个已知变量的取值生成的 . tab [已知变量名], gen [新变量名]•基于某个已知变量,生成一组虚拟变量•虚拟变量的数目因已知变量的分类而异–若现存变量有两个取值,则生成两个虚拟变量–若现存变量有三个取值,则生成三个虚拟变量–若现存变量有n个取值,则生成n个虚拟变量•新生成的虚拟变量有相同的前缀,也就是[新变量名],但尾缀相异,由已知变量名的取值决定 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.