【问题标题】:Stata Matrix Creation Assign valueStata 矩阵创建分配值
【发布时间】:2013-04-26 13:44:08
【问题描述】:
  1. 创建矩阵 M= (N*50) 矩阵 m=J(N,50,.)

    由于我要更改观察超时的次数,如何设置N=观察次数?

  2. 如何指定矩阵的每个元素,例如M(1,2)(第 1 行第 2 列中的元素)?

  3. 如何为矩阵的每个元素赋值?例如,我想将 O 设置为第一行全为 0,即 M(1,1)=M(1,2)=...M(1,50)=0?

【问题讨论】:

    标签: matrix stata


    【解决方案1】:
    . // an (empty) dataset with 5 observations
    . clear all
    
    . set obs 5
    obs was 0, now 5
    
    . 
    . // go to Mata
    . mata:
    ------------------------------------------------- mata (type end to exit) -------------------------
    : 
    : // collect the number of observations
    : n = st_nobs()
    
    : 
    : // create matrix M (n x 10)
    : M = J(n, 10, .)
    
    : 
    : // see it:
    : M
            1    2    3    4    5    6    7    8    9   10
        +---------------------------------------------------+
      1 |   .    .    .    .    .    .    .    .    .    .  |
      2 |   .    .    .    .    .    .    .    .    .    .  |
      3 |   .    .    .    .    .    .    .    .    .    .  |
      4 |   .    .    .    .    .    .    .    .    .    .  |
      5 |   .    .    .    .    .    .    .    .    .    .  |
        +---------------------------------------------------+
    
    : 
    : // fill the first row with 0s
    : M[1,.] = J(1,10,0)
    
    : 
    : // See cell 1,2
    : M[1,2]
      0
    
    : 
    : // see cell 2,3
    : M[2,3]
      .
    
    : end
    

    【讨论】:

    • 天才!非常感谢!我发现 Stata 无情,例如如果我打错字,我无法撤消。我必须清除并重新启动一切。有什么解决办法吗?例如,设置 obs 5 mata: n = st_nobs() M = J(n, 10, .) M[1,.] = J(1,9,0) r(3200) M = J(n, 10, .) r199 意味着我必须清除并重新启动....
    • 我不明白这如何迫使您重新启动。此类错误会将您从 Mata 踢到 Stata,但您可以再次启动 Mata,您创建的元素仍然存在。但是,最好始终使用 .do 文件。这样您就可以修复 .do 文件并重新运行它,这样您就不必依赖在错误运行后留下的东西。这导致代码更加稳定。
    • 想一想,这正是我所做的。我在 .do 文件中编写了示例,出现了一些错误(我尝试显示 m 而不是 M),当我尝试运行它时,我看到 Stata 抱怨,我修复了 .do 文件并再次运行它.没有必要,我可以打开 Mata 并输入 M 来查看矩阵并从那里继续构建示例。通过更改 .do 文件,我确保如果您运行该示例,则不会留下未检测到的错误。
    • 有道理!再次感谢。 :) 我已经搜索了用户指南。但还是有些疑惑。 1.如何创建和保存.do文件?只有当我创建了一个变量时,我才能保存一个 .dta 文件。 2. 如果我想在整行或矩阵的特定元素中生成一个数字 ~N(a,b) 怎么办?没有这样的东西 M[1,.] = M(1,10,rnormal(a,b))
    • 你在 Stata 中输入了search do 吗?
    【解决方案2】:

    创建一个 .do 文件。

    只需使用任何文本编辑器,包括 Stata 的 do-file 编辑器,并使用扩展名 .do 保存。

    同一随机法线连续偏离。这是一种方法:

    : m = J(5,5, .)
    
    : m[1,] = J(1, 5, rnormal(1,1,0,1))
    
    : m
                     1             2             3             4             5
        +-----------------------------------------------------------------------+
      1 |  2.285713101   2.285713101   2.285713101   2.285713101   2.285713101  |
      2 |            .             .             .             .             .  |
      3 |            .             .             .             .             .  |
      4 |            .             .             .             .             .  |
      5 |            .             .             .             .             .  |
        +-----------------------------------------------------------------------+
    

    【讨论】:

    • 谢谢考克斯。跟进。 1. 正常(a,b,mean,sd)? a 和 b 分别是什么? 2. rnormal 中的这 4 个元素中的任何一个都可以是标量或变量吗? 3. 同一行有不同的数字怎么办?例如。使用 foreach 循环可以在同一行中生成不同的数字吗?
    • 如果你是乔伊,我就是尼克。抛开那个友好的姿态,对不起,但你问我的问题太多了。每个人的时间和利他主义都是有限度的。你只需要养成阅读帮助和实验的习惯。
    • 对不起尼克。感谢您的及时回复并感谢您的建议。:)
    • 输入Stata help mata rnormal()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多