Stata 中Mata的st_view函数 - 小心使用!
  TEZNKK3IfmPf 2023年11月12日 27 0

 

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()对象 。

非常感谢您阅读本文,有任何问题请在下方留言!

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: 已经是第一篇 下一篇: 已经是最后一篇
  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论