诸君安!在往期推文《如何在Mata中进行网页分析》中我们用到了Mata函数st_sview(),该函数表示读取Stata当前内存的字符型数据,并赋给Mata矩阵。其实在Mata中有两类函数可以读取Stata当前内存的数据,分别是st_data()和st_view()函数。对此,我们分两篇推文进行介绍,今天先介绍st_data()的用法。 我们打开st_data()函数的help文件,总结st_data()函数的语法结构如下: 可以看到,函数st_data()主要是提取Stata 当前内存的数值型变量,而函数st_sdata()主要是提取Stata 当前内存的字符型变量,其中:i表示新生成的矩阵行数,j表示新生成的矩阵列数,selectvar表示一个标量,这里有3种类型的表示方法: (1)如果selectvar是变量的名称或者是该变量在Stata内存中的变量序号,则表示提取该变量的非零观测值(含缺失值)所对应的样本。 (2)如果selectvar是0,则表示提取所选变量中没有缺失的观测值。 (3)如果selectvar是“.”或者“ ”,则与不加选项selectvar是一样的效果。 下面我们通过例子来详细说明函数st_data()的用法。首先我们在Stata 中读入系统数据auto,键入如下命令: sysuse auto,clear keep in 1/10 接着进入Mata环境,先提取数值变量,输入命令如下: mata A1=st_data(1,2) //提取第二个变量的第一个观测值。 A1 A2=st_data(.,2) //提取第二个变量的所有观测值。 A2 A3=st_data((1\2\5),2) //提取第二个变量的第1、2、5个观测值。 A3 A4=st_data((1,5),2) // 提取第二个变量的第1-5个观测值。 A4 A5=st_data((1::5),2) // 同上 A5 A6=st_data((1,5\7,9),2) //提取第二个变量的第1-5和第7-9个观测值。 A6 A7=st_data(.,(3,9)) //提取第三、九个变量的所有观测值。 A7 A8=st_data(.,('mpg','weight')) //提取变量mpg和weight的所有观测值。 A8 A9=st_data(., 'mpg weight') //同上 A9 end 部分结果如下: 除此之外,st_data()函数还可以直接提取变量的滞后变量和虚拟变量,举例如下: 先构造一个时间变量year,键入如下命令 en year=2000+_n tsset year //定义变量year为时间变量 然后,进入Mata环境进行提取: mata A10=st_data(., ('price', 'l.price')) // 提取变量price和变量price的滞后一期的所有观测值。 A10 A11=st_data(., 'price l.price') // 同上 A11 A12=st_data(., 'mpg i.rep78') //提取变量mpg和虚拟变量rep78的所有观测值,含缺失值。 A12 部分结果如下: 接下来,我们看看例子中加入选项selectvar的含义,键入如下命令: tab rep78, generate(r) //生成变量rep78的虚拟变量 mata A13=st_data(., 'mpg weight') A13 A14=st_data(., 'mpg weight','r2') //虚拟变量r2取值是非0时,提取变量mpg 和weight对应的观测值 A14 A15=st_data(., 'mpg weight',15) //同上,15表示变量r2在stata内存中变量的序号 A15 A16=st_data(., 'mpg i.rep78', ) // 提取变量mpg和虚拟变量rep78的所有 观测值,含缺失值。 A16 A17=st_data(., 'mpg i.rep78',.) // 同上 A17 A18=st_data(., 'mpg i.rep78',0) //提取变量mpg和虚拟变量rep78非缺失的观测值 A18 end 部分结果如下: 接着我们提取Stata当前内存的字符变量,键入如下命令: mata A19=st_data(.,1) A19 A20=st_sdata(.,1) //提取第一个变量的观测值 A20 A21=st_sdata(., 'make') //提取变量make的观测值 A21 A22=st_sdata(., 'make','r1') //提取虚拟变量r1取值非0时,对应的样本 A22 A23=st_sdata(., 'make','r2') //提取虚拟变量r2取值非0时,对应的样本 A23 end 部分结果如下: 注意到,矩阵A19中的观测值都是缺失值,这是因为函数st_data()只能提取Stata当前内存的数值型变量。这里 Stata也不会因此而报错,只不过这些变量的观测值都以缺失值的形式存在。 视 频 |
|