Stata作为标量或宏访问矩阵的元素

Stata作为标量或宏访问矩阵的元素,stata,Stata,我在Stata中生成一列随机数,尝试不同的种子,看看哪一个能给出最好的结果。我创建了250个随机数,并将它们粘贴到下面看到的foreach循环的代码中。省略号表示约240个种子 save "`datadir'ProviderCounty", replace foreach x in 89583 31214 65326 61107 54662 91414 86171 14809 19625 . . . 74397 85273 { use "`datadir'ProviderCounty

我在Stata中生成一列随机数,尝试不同的种子,看看哪一个能给出最好的结果。我创建了250个随机数,并将它们粘贴到下面看到的foreach循环的代码中。省略号表示约240个种子

save "`datadir'ProviderCounty", replace

foreach x in 89583 31214 65326 61107 54662 91414 86171 14809 19625 . . . 74397 85273 {

    use "`datadir'ProviderCounty", replace
    display `x'
    set seed `x'
    generate rannum = uniform()
    . . . 
}
我想通过将250个数字从Excel读取到这样的矩阵中,然后逐个迭代矩阵来替换这一长行

* Import seeds randomly generated in Excel
clear
import excel "`datadirIN'Random Number Seeds.xlsx", sheet("Sheet1") cellrange(A2:A252) firstrow
mkmat Seeds, matrix(matSeeds)
scalar mlen = rowsof(matSeeds)
clear

这将介于以“save…”开头的行和foreach行之间。我不知道怎么做的是迭代矩阵。我需要一行,用一行(s)替换foreach行,该行通过矩阵进行迭代,并将种子编号放置在宏“x”中。

我希望我是误解了,但基本想法似乎是错误的。使用指定种子的唯一优点是确保详细结果的可再现性,即使用相同程序和相同数据的其他人至少可以确保相同的结果(因此可以准确地检查您所做的事情)。否则,如果结果敏感地依赖于特定的种子,那么要么样本量太小,要么问题太脆弱,任何结果都不可信。你打算怎么报告这件事?如果你隐瞒了必须搜索合适结果的事实,那么这将被广泛认为是不可接受的。如果你公开事实,你就会公开那些被认为是可疑和无用的结果。我建议您酌情与主管、导师或同事讨论您的想法。如果他们提出这个建议,无论你在哪里展示结果,都需要解释为什么你认为这是一个好主意

综上所述,Stata矩阵有行和列,因此给定一个列向量,它的元素通常是matname
[
i
,1]
。订阅在Stata矩阵的任何文档中定义,例如

所以你似乎暗示的循环可能是

mkmat Seeds, matrix(matSeeds)

forval i = 1/`= rowsof(matSeeds)' {
    ...
    set seed `= matSeeds[`i', 1]'  
    ... 
}
记录(在本例中)标量和矩阵元素的动态计算

编辑:此处使用的语法记录在
帮助宏
或中。以下是一个例子:

. mat foo  = J(1, 1, 42)

. set seed `=foo[1,1]'

. display c(seed)
X51535c3ec43f462544a474abacbdd93d386b

. mat foo  = J(1, 1, 666)

. set seed `=foo[1,1]'

. display c(seed)
X97b5c5aec43f462544a474abacbdd93d2d9c
这里的根本问题是
设置种子
本身不会对提供给它的表达式求值。有多种解决方法,包括定义本地宏,然后键入宏引用。Stata的工作方式是在
set
看到其参数之前对宏进行求值。此处显示的语法通过动态求值删除宏


这里使用的情况是,展开式_optr是一个等号
=
,后跟exp,即要计算的表达式。在这种情况下,表达式只是一个矩阵元素

我希望我是误解了,但其背后的想法似乎是错误的。使用指定种子的唯一优点是确保详细结果的可再现性,即使用相同程序和相同数据的其他人至少可以确保相同的结果(因此可以准确地检查您所做的事情)。否则,如果结果敏感地依赖于特定的种子,那么要么样本量太小,要么问题太脆弱,任何结果都不可信。你打算怎么报告这件事?如果你隐瞒了必须搜索合适结果的事实,那么这将被广泛认为是不可接受的。如果你公开事实,你就会公开那些被认为是可疑和无用的结果。我建议您酌情与主管、导师或同事讨论您的想法。如果他们提出这个建议,无论你在哪里展示结果,都需要解释为什么你认为这是一个好主意

综上所述,Stata矩阵有行和列,因此给定一个列向量,它的元素通常是matname
[
i
,1]
。订阅在Stata矩阵的任何文档中定义,例如

所以你似乎暗示的循环可能是

mkmat Seeds, matrix(matSeeds)

forval i = 1/`= rowsof(matSeeds)' {
    ...
    set seed `= matSeeds[`i', 1]'  
    ... 
}
记录(在本例中)标量和矩阵元素的动态计算

编辑:此处使用的语法记录在
帮助宏
或中。以下是一个例子:

. mat foo  = J(1, 1, 42)

. set seed `=foo[1,1]'

. display c(seed)
X51535c3ec43f462544a474abacbdd93d386b

. mat foo  = J(1, 1, 666)

. set seed `=foo[1,1]'

. display c(seed)
X97b5c5aec43f462544a474abacbdd93d2d9c
这里的根本问题是
设置种子
本身不会对提供给它的表达式求值。有多种解决方法,包括定义本地宏,然后键入宏引用。Stata的工作方式是在
set
看到其参数之前对宏进行求值。此处显示的语法通过动态求值删除宏


这里使用的情况是,展开式_optr是一个等号
=
,后跟exp,即要计算的表达式。在这种情况下,表达式只是一个矩阵元素

你可以解释为什么你认为我的评论是错误的或无关紧要的。这对你来说是不受欢迎的,但“尝试不同的种子,看看哪一个能给出最好的结果”是一个典型的误解,基于随机数生成的模拟。否则我的评论就站不住脚了。你对语法有什么疑惑?它是
set
的语法,与
matrix
本身无关。你试过了吗?你试过你猜的语法了吗?对于那些感兴趣的人来说,一系列以威廉·H·克鲁斯卡尔和弗雷德里克·莫斯特勒为起点的论文是值得欢迎的。1979代表性抽样,I:非科学文献。《国际统计评论》47:13–24详细分析了一个难以捉摸且有问题的想法。我的第一段是,现在也是,善意地试图警告OP(以及其他感兴趣的人),正如解释的那样,基本的统计想法似乎可疑。我认为这是公正的评论。可以说,一个想法的统计优点在这里是离题的,但作为一个统计人员,我也认为标记可能存在问题的案例是适当和合乎道德的。