syntax - 马塔错误3204

标签 syntax stata

我不确定为什么会收到错误。

我认为这可能源于对结构语法的误解,但我不确定这是否是问题所在(如果存在多个问题也就不足为奇了)。

我正在模拟代码(来自 William Gould 的 The Mata Book),其中输入是一个标量,但我正在编写的程序的输入是一个 colvector。

本练习的目的是根据列向量创建一个方阵(根据某些规则),创建后,将该方阵乘以自身。

代码如下:

*! spatial_lag version 1.0.0

version 15
set matastrict on
//--------------------------------------------------------------
local SL                struct laginfo

local RS                real scalar
local RC                real colvector
local RM                real matrix
//--------------------------------------------------------------
mata

`SL'
{
    //-------------------inputs:
    `RC'    v
    //-------------------derived:
    `RM'    W
    `RM'    W2
    `RS'    n
}

void lagset(`RC' v)
{
    `SL' scalar r
    // Input:
    r.v     =   v
    //I set the derived variables to missing:
    r.W     =   .z  
    r.W2    =   .z  
    r.n     =   .z  // length of vector V
}

`RM' w_mat(`SL' scalar r)
{
    if (r.W == .z) {
        real scalar row, i
        real scalar col, j
        r.W = J(r.n,r.n,0)
        for (i=1; i<=r.n; i++) {
            for (i=1; i<=r.n; i++) {
                if (j!=i) {
                    if (r.v[j]==r.v[i]) {
                        r.W[i,j] = 1
                    }
                }
            }
        }
    }
    return(r.W)
}

`RS' wlength(`SL' scalar r)
{
    if (r.n == .z) {
        r.n     =   length(r.v)
    }
    return(r.n)
}

`RM' w2mat(`SL' scalar r)
{
    if (r.W2 == .z) {
        r.W2    =   r.W * r.W
    }
    return(r.W2)
}
end

编译没有问题,但是当我尝试以交互方式使用它时出现错误,如下所示:

y=(1\1\1\2\2\2)
q = lagset(y)
w_mat(q)
w2mat(q)

前两行运行良好,但是当我运行其中的最后两行时,我得到:

         w_mat():  3204  q[0,0] found where scalar required
         <istmt>:     -  function returned error

我误会了什么?

最佳答案

此特定错误与结构无关。 Stata 只是提示,因为 lagset() 函数是 void。也就是说,它不返回任何东西。因此,q 最终为空,这又被不适本地用作函数 w_mat() 的输入 - 因此 q[0,0]引用。

关于syntax - 马塔错误3204,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50916638/

相关文章:

java - Java中<code>到底是什么

mysql - MySQL 中的 WHILE 语法错误

stata - 根据最近的 I/观察生成变量

r - R和Stata的合并命令比较

stata - 如何强制 Stata 在图表中的所有其他图上方放置一条水平线?

flutter - Dart中的 “…”是什么意思?

c++ - C++中的$符号

C# 符号

arguments - 批处理模式下的Stata命令行参数

stata - 在 Stata 中将值标签大写