【发布时间】:2011-03-04 04:45:10
【问题描述】:
这个问题纯粹出于求知欲。
相对经常地浏览 Python 部分,我看到了许多类似于 this 的问题,其中有人要求以编程方式定义全局变量。他们中的一些人知道exec 的陷阱,而其他人则没有。
但是,我最近一直在 Stata 中进行编程,以下是常见的:
local N = 100
local i = 1
foreach x of varlist x1 - x`N' {
local `x' = `i' * `i'
++i
}
用 Stata 的说法,创建一个名为 N 的本地宏,N 的计算结果为 100。在 foreach 循环的每次迭代中,从 x1 到 x100 的值被分配给本地宏x。然后,循环内的行将i 的平方分配给x 的扩展,这是一个与i 结尾相同的局部宏。也就是说,在这个循环之后,x4 扩展为 4^2,x88 扩展为 88^2。
在 Python 中,执行类似操作的方法是:
squares = {}
for x in range(1,101):
squares[x] = x**2
那么squares[7] 等于 7^2。
这是一个非常简单的例子。 stata 宏还有很多其他用途。您可以将它们用作传递要评估的函数的一种方式,例如:
local r1 "regress"
local r2 "corr"
foreach r of varlist r1-r2 {
``r'' y x
}
r 周围的双刻度线将该宏扩展了两次,首先是 r1/r2,然后是 regress/corr,运行线性回归的结果是 y 作为依赖项和x作为自变量,然后显示y和x之间的相关性。更复杂的东西是可能的。
我的问题基本上是,stata 是否属于某种更大的语言类别,其中变量赋值/评估采用这种“宏赋值/扩展”形式?任何解释为什么会这样设计一种语言,和/或其他语言中类似结构的示例的任何解释都会加分。
【问题讨论】:
标签: python variable-assignment stata stata-macros