我不确定为什么会收到错误。
我认为这可能源于对结构语法的误解,但我不确定这是否是问题所在(如果存在多个问题也就不足为奇了)。
我正在模拟代码(来自 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/