分享

听说你想知道st_data()函数的用法

 张春强2022 2017-11-05


诸君安!在往期推文《如何在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)如果selectvar0,则表示提取所选变量中没有缺失的观测值。

(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也不会因此而报错,只不过这些变量的观测值都以缺失值的形式存在。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多