• Stata 中Mata的st_view函数


    原文链接:http://tecdat.cn/?p=6414

    经常使用Stata,我认为这是一个很棒的包。几年前的一个很好的补充是Mata语言,一种完全成熟的矩阵编程语言 。我相信Stata的许多内置命令都是用Mata编程的。我一直在使用Mata来编写新的命令 。这篇文章有望帮助其他人避免我所遇到的问题。

    st_view()


    Mata中的st_view()函数使您可以创建“对当前Stata数据集的视图”的对象。具体来说,您可以创建指向当前Stata数据集的一个或多个部分的Mata对象。例如之后

    st_view(x,。,“x”)

    我们可以使用Mata对象x来检查x变量的内容。 

    调用st_view()有很多种方法。 

    st_view()对象按列号指向,而不是指向变量


    我通过遇到奇怪行为发现的第一个重点是st_view()对象指向Stata数据集中的特定列,即使通过传递变量来调用它也是如此 。这意味着,创建了Mata对象x,它是Stata数据集中变量x的视图,如果Stata数据集中的变量x改变位置,则Mata st_view对象x将不再指向正确的变量。为了说明,尝试以下代码 :

    mata:
    mata clear 
    
    void test(){ 
    	st_view(x,。,“x”)
    	x 
    	stata(“drop y”)
    	x 
    } 
    
    end 
    
    clear 
    set obs 5 
    gen y = 1 
    gen x = 2 
    mata:test()
    
     代码生成一个Stata数据集,其中包含两个变量y(包含1个)和x(包含2个)。Mata程序test()首先创建Mata对象x,它指向Stata数据集变量x。 然后我们从Mata程序中调用Stata命令drop y。然后我们再次打印Mata对象x。运行代码,我们得到输出:
    。mata:test()
           1 
        + ----- + 
      1 | 2 | 
      2 | 2 | 
      3 | 2 | 
      4 | 2 | 
      5 | 2 | 
        + ----- + 
           1 
        + ----- + 
      1 | 。| 
      2 | 。| 
      3 | 。| 
      4 | 。| 
      5 | 。| 
        + ----- +

    我们看到第一次输出x给我们x变量,它包含2s。但是我们第二次调用print x时,会得到一列缺失值。 事实证明它指向特定的列,而不是特定的变量。 

    这种行为有什么影响?如果我们使用st_view()并调用它以指向特定变量,我们应该知道如果重新排序Stata数据集的变量,我们的st_view()对象可能不再指向正确的变量。这意味着每次我们在Mata程序中对Stata数据集进行更改时,我们都应该重新定义我们想要使用的任何Mata st_view()对象。

      

    这有什么影响? 必须在 “更改数据集”之后重新创建st_view()对象 。

    如果您有任何疑问,请在下面发表评论。  

  • 相关阅读:
    strcpy的实现
    使用Highcharts生成柱状图
    使用Highcharts结合PHP与Mysql生成饼状图
    shopnc 学习笔记
    php中关于mysqli和mysql区别的一些知识点分析
    jquery捕获enter键 按enter键执行提交
    php在IE浏览器中保存SESSION
    ShopNC 商城系统开发经验分享第五篇: 缓存设计
    ShopNC 商城系统开发经验分享第二篇:ShopNC商城系统初步分析
    SHOPEX于SHOP++比较哪款更适合做二次开发,为什么?
  • 原文地址:https://www.cnblogs.com/tecdat/p/11475294.html
Copyright © 2020-2023  润新知