stata学习资料-第六章

更新时间:2024-01-27 22:00:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

6.1

问题:假如我们有一个截面数据,内容是一些病人在一些诊所就诊的记录,比如病人信息和

诊所ID。我们还有一个表,内容是每个诊所对应的地区编号。我们怎么把表二中的地区编号和表一中的每个诊所联系起来,或者说如何将两张表整合到一起? 比较二的方法:用if条件筛选,逐个代换。P118有介绍 核心知识点:merge命令的使用 主键一对多情况下的数据整合

其中作为主键的clinicid 在表一中并不是唯一确定的观测值 不能简单的1:1匹配合并 这时就需要用到1:m或m:1 use 表一

merge m:1 主键 using 表二

(此处为m:1是因为表一中clinicid有重复) 结果为:

备注:关于新版和旧版命令的区别:一是语法区别,旧版是merge 主键 using 表二, uniqusing. 其中uniqusing是用来确定唯一观测值的,新版省掉了。二是新版不用先对主键排序才能合并,而旧版命令必须排序。

m:m即表一和表二中主键clinicid都不唯一。语法为 merge m:m 主键 using 表二

6.2

问题:很多数据源提供的数据适用于展示 但不适用于分析处理,如何将其转换成我们所需要

的形式

核心知识点: reshape命令的使用

reshape 命令是stata提供的重要的数据管理工具之一。如果我们想要调整你现有数据的结构,就要熟悉reshape的两个功能:一是变宽,一是变长。具体讲,可能是把某种数据变成时序数据、或者是把时序数据变成某种数据。有时候问题比较麻烦,我们需要对数据进行两次reshape,才能调整到我们想要的结果。

举例:将表一变成表二形式

1

表一有四个变量,分别是country,tradeflow, Yr1990, Yr1991.其中tradeflow是作为一个变量主体,分为imports和exports,而1990和1991的贸易流是作为两个并列的变量主体。我们要把它转成面板数据,分两步。第一是Yr1990和Yr1991改成时间序列,tradeflow暂时不变。执行第一步的指令后效果如下

其他变量没变的前提下,生成了一个新变量 _j ,代表年份。 reshape long Yr,i(country tradeflow)这个命令。也可写成

reshape long Yr,i(country tradeflow) j(year) 执行结果一样,而且这样写更好理解。 Yr表示需要转换变量的前缀。在这个例子中,一个国家的贸易流由两个维度限定,比如第一个数据105:一是它代表A国的进口,二是年份为1990。我们引入两个变量i和j。i代表country tradeflow、j代表year。i(varlist)表示长格式识别变量,长格式标示变量可以为多个,故可以设置多个变量.如本例. j(varname)为从宽格式转换为长格式的新生成的标识变量。执行上述指令时,stata会自动将Yr1990拆分、并把数值部分1990赋值给新的时间变量j。所以,Yr1990和Yr1991的命名要保持一致,如果这两个变量的命名分别是year1990和Yr1991,则无法正常拆分。

补充:

用的是reshape long math economy, i(sno) j(year)

第二步是,我们再把表变宽:把tradeflow中的imports和exports变成两个并列的变量主体。执行第二步的指令后,效果如下:

2

把第一步转换结果中的obs1和obs3 由

转换成

与第一步同理,目的不一样,我们要把上一页图中的第一条记录和第三条记录合到一起,把imports和exports作为两个并列的变量。也要考虑两个维度:i(country year)和 j(tradeflow)。因为tradeflow是字符串型数据,所以后要加string用以说明。

6.3

问题:有时候日期数据并不是连续的,比如金融市场在周末是停止交易的.stata的时间序列数

据系统是允许每日数据和日间数据的表示,但是时间序列中有间断的话可能会出问题.比如因为间断的存在导致其他日期数据的丢失.”商业日期”这个概念的意思是假定星期五之后接着是星期一.同时,我们又希望数据按stata日历时序来放置,以便在使用比如tsline命令时,图表中能显示可读的日期.

解决方案:定义2个日期变量.一个是实际日历格式,一个是连续的观测值编号.我们想让日期

数据显示为日历格式时,就把它声明为第一种,用于统计分析时,就把它声明为第二种. 几种日期数据显示的对比:

字符串 日期数据 时序数据 日历格式的时序 观测值序号

1 2 3 4 5 6 date()? tsset()? format? gen?

tin(d1,d2)函数指先前tsset的时间序列数据如果范围在d1和d2之间,则取值为1,否则为0.该例中的作用是,保留2005年8月1号之后的数据.对比下inrange和lnlist

如果单是观测值的缺失,即时间序列的间断,处理的方法就是以观测值序列号赋值为新的连续的时间序列数据.如果该文件数据中还存在缺失数据的问题,处理起来会麻烦一点.

指令的含义是:当数据为缺失值时,notmiss赋值为0,cond函数会将缺失值赋于seqdate.当不为缺失值时,notmiss为1,seqdate被赋值为sum(notmiss) 即非缺失值的个数.这段指令的效果,是给没有缺失值的观测对象编号,并转为时序数据.

3

关于时间变量的补充:

1.如果时间的组成部分分别存放在不同的数值变量中,则转换命令为: mdy(month, day, year) 2.如果时间变量为字符型变量,则转换命令为:date(datestr, mask,[topdate]) 例 gen edate2=date(mydate, \表示不超过2040年的最高年份>

3.在用tsset把日期数据声明为时序数据时,可用tsset d,daily来让时序数据显示为日历格式 4.tsline v1,tlelabel(,format(%td)) ttitle(“2009年XX趋势图”) 可定义绘图中时间格式和标签

6.4

问题:假如在一个面板数据中,一些相同属性的数据分别处于不同的变量之中,我们如何针

对这些不同变量中的某一属性数据来做计算或统计

核心知识点:Reshape命令,by和tabstat、tag等命令或函数的配合使用 解决方案:先展开,再分组, 再统计。 补充知识点:将多列数据转成一列

stack var1-var5, into(x) clear

4

6.5

问题:mfx命令可以计算很多边际结果,并可以将结果用estimates store命令保存,但是并不

能用estimates table这个命令使用这些数据。 核心知识点:estadd、esttab命令的使用。

解决方案:用estadd命令新建个标量用于存放所需的模型结果.再用esttab输出命令可以访问标量值.

estadd:add results to stored estimates esttab:display formatted regression table

比如我们取空气质量的一个表为例.我们使用普通二乘法(回归)和工具变量法(二阶段最小二乘法)将对它进行2种分析.对象是每个城市的大气中的二氧化硫.它与城市的人口,工厂的数量,平均风速等因素相关.。在工具变量法估计中,我们假定人口是内生变量,平均温度和平均沉淀物为辅助变量。

每次估计之后,我们用mfx compute,eyex命令来计算二氧化硫对于每个回归元的弹性。mfx是e类命令,故可以直接使用。这里,我们用两个矩阵分别存放点弹性的估计和标准误。每个矩阵的下标为[1,1]的元素为人口,因为它是第一个回归元。在保存估计模型之前,我们将该元素存为标量nu、nuse,分别为弹性、标准误。

6.5.1

有些情况下,我们想要显示的是边际效应而不是未经处理的系数估计结果,这时候,使用esttab后接的margin选项就可以效果.它会抑制未经处理的估计结果的显示,但是能得到我们想要的边际效应和标准误.

比如我们生成一个指示变量用以区分二氧化硫浓度是在中间水平之上还是之下,然后进行两种形式的概率单位模型的估计

6.6

问题:如何使时序数据更低频率的显示,比如把月度转成季度,后者的取值可以是每季的第一

个月的数据,也可以是3个月数据之和,也可以是平均数等等,依数据性质和需求而定. 解决方案:dofm,qofd函数

tsmktim命令会依据第一个观测值的值计算出一个时序日历变量,也会依据时序算法和函数的需要自动的它调整成合适的日期显示频率.前提是我们要数据是按正确的时序顺序放置的,并没有时间间断.

比如该例中,只给出了格式为1949.0 1949.083 1949.167等值的一个表时间的变量.我们可以用tsmktim命令生成一个精确到月的变量ym,start(1949m1)的作用是把这些数据都显示为这种格式.我们再用month,dofm函数算出每个变量的所属月份.而mod函数可以让我们找到每个季度的最后一个月份.指示变量eoq则记录下把它们都除以3则得到相对应的每个季度的编号.

generate qtr=qofd(dofm(ym))这个命令的作用是:ym是月度日期数据。先把ym改成日度,再改成季度。

归纳: qofd:把日度转成季度 语句中fd是指from daily 同样的还有mofd wofd hofd yofd

dofm:把月度转为日度 fm是指from monthly 默认为该月的1号 同样的还有dofw dofq dofh ofy

month:把日度日期数据中月份提取出来

5

本文来源:https://www.bwwdw.com/article/5lnw.html

Top