Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stata 在.ado文件中使用Mata-语法错误_Stata - Fatal编程技术网

Stata 在.ado文件中使用Mata-语法错误

Stata 在.ado文件中使用Mata-语法错误,stata,Stata,这个问题是我之前问题的延续,但由于我可以在不知道我之前问题的情况下回答这个问题,我认为发布一个新问题是解决这个问题的方法(如果不是这样的话,我很抱歉)。在前面的问题中,我被告知将Mata代码放在.ado文件的末尾将使本地var2在Stata代码中可用。下面是一个简单的例子: program define hello args var1 local sum_var=`var1'+`var2' disp `sum_var' end mata void cens_func(todo, x, y, g

这个问题是我之前问题的延续,但由于我可以在不知道我之前问题的情况下回答这个问题,我认为发布一个新问题是解决这个问题的方法(如果不是这样的话,我很抱歉)。在前面的问题中,我被告知将Mata代码放在.ado文件的末尾将使本地
var2
在Stata代码中可用。下面是一个简单的例子:

program define hello
args var1
local sum_var=`var1'+`var2'
disp `sum_var'
end

mata
void cens_func(todo, x, y, g, H)
{
y = (x-1)^2
}

S = optimize_init()
optimize_init_evaluator(S, &cens_func())
optimize_init_which(S, "min")
optimize_init_params(S, 2)
temp=optimize(S)
st_local("var2",strofreal(temp))
end

不幸的是,它没有运行。我得到一个无效的语法错误。首先使用Mata代码在.do文件中运行此命令不会导致任何错误。我错过了什么?提前感谢。

特别是,您没有定义
var2
,因此仅此一项就应该导致 由于Stata将看到挂起的加号,本地
的第一次分配失败
签字

在任何情况下,如果只是因为Mata Stata代码从不调用函数

通常,诸如“未运行”或甚至“语法错误”之类的报告都不会运行 信息量很大,因为他们没有给其他人真正的线索 发生Stata在这里没有错,因为它提供了调试工具 如果
设置trace on
,您可以看到哪一行失败

将其作为do文件运行只是定义了一个程序;它不能证明这一点 这是合法的,甚至是正确的

有了这个证据,你应该试着写一些简单的程序 你有一个现实的前景让这个工作。甚至复制一些
手册中的示例程序将有所帮助

具体来说,您没有定义
var2
,因此仅此一项就应该导致 由于Stata将看到挂起的加号,本地
的第一次分配失败
签字

在任何情况下,如果只是因为Mata Stata代码从不调用函数

通常,诸如“未运行”或甚至“语法错误”之类的报告都不会运行 信息量很大,因为他们没有给其他人真正的线索 发生Stata在这里没有错,因为它提供了调试工具 如果
设置trace on
,您可以看到哪一行失败

将其作为do文件运行只是定义了一个程序;它不能证明这一点 这是合法的,甚至是正确的

有了这个证据,你应该试着写一些简单的程序 你有一个现实的前景让这个工作。甚至复制一些
手册中的示例程序将有所帮助

我将回顾我昨天的回答。Mata将创建新本地或更改现有本地,但在创建本地之前不能使用它。与Mata无关,Mata改变了这一点

从Stata调用Mata时,请参见帮助m1\u ado


因此,在代码中,当Mata函数创建
var2
时,在尝试使用
var2
之前,需要进行Mata调用

我将回顾我昨天的回答。Mata将创建新本地或更改现有本地,但在创建本地之前不能使用它。与Mata无关,Mata改变了这一点

从Stata调用Mata时,请参见帮助m1\u ado

因此,在代码中,当Mata函数创建
var2
时,在尝试使用
var2
之前,需要进行Mata调用

我经常这样做:

program define... 
  tempvar var2
  gen `var2' = <<whatever>>
  mata: myroutine("`var2'")
end

mata:
void myroutine(string scalar inputvar)
{
  real vector v
  st_view(v,.,inputvar)
  <<use v somehow>>
}
end
程序定义。。。
tempvar var2
gen'var2'=
mata:myroutine('var2'))
结束
马塔:
void myroutine(字符串标量inputvar)
{
实向量v
st_视图(v,,,输入变量)
}
结束
您还可以调用
st_store
来编写一个新的Stata变量。我的代码只是将其读入Mata。

我经常这样做:

program define... 
  tempvar var2
  gen `var2' = <<whatever>>
  mata: myroutine("`var2'")
end

mata:
void myroutine(string scalar inputvar)
{
  real vector v
  st_view(v,.,inputvar)
  <<use v somehow>>
}
end
程序定义。。。
tempvar var2
gen'var2'=
mata:myroutine('var2'))
结束
马塔:
void myroutine(字符串标量inputvar)
{
实向量v
st_视图(v,,,输入变量)
}
结束

您还可以调用
st_store
来编写一个新的Stata变量。我的代码只是将其读入Mata。

谢谢您的回复。我认为这是一个相当简单的程序,我怀疑你没有理解我的问题。我所希望的就是能够在Mata环境中进行一些操作,例如最大化/最小化某个函数,并将其作为
local
输出,以便在Stata环境中使用。上面的Mata代码运行得非常好,只是最小化函数(x-1)^2的一种方法。也许是这样,但您的Mata代码没有链接到Stata代码。我理解你的问题是为什么这个程序不起作用,我给出了一些提示。我想你误解了斯塔塔和玛塔一起工作的方式。在您编写的程序中,如果Stata代码未调用Mata代码,则不会使用Mata代码。与以前一样,您可以在程序文件中定义任意数量的Mata函数,但如果不调用它们,则不会发生任何事情。特别是,如果调用Mata代码,它将只定义一个本地代码,例如
var2
。感谢您的回复。我认为这是一个相当简单的程序,我怀疑你没有理解我的问题。我所希望的就是能够在Mata环境中进行一些操作,例如最大化/最小化某个函数,并将其作为
local
输出,以便在Stata环境中使用。上面的Mata代码运行得非常好,只是最小化函数(x-1)^2的一种方法。也许是这样,但您的Mata代码没有链接到Stata代码。我理解你的问题是为什么这个程序不起作用,我给出了一些提示。我想你误解了斯塔塔和玛塔一起工作的方式。在您编写的程序中,如果Stata代码未调用Mata代码,则不会使用Mata代码。与以前一样,您可以在程序文件中定义任意数量的Mata函数,但如果不调用它们,则不会发生任何事情。特别是,如果调用了Mata代码,它只会定义一个局部变量,例如
var2
。我完全同意你的论点,即必须调用它。我的问题是,当查看
help m1时_