gpt4 book ai didi

programming-languages - 没有语法的Stata编程语言?

转载 作者:行者123 更新时间:2023-12-04 08:37:45 36 4
gpt4 key购买 nike

我最近从程序/OO/功能背景进入Stata,并且在理解该语言的基本元素时遇到了困难。

比如我发现有一个syntax命令“允许程序根据语法(例如标准 Stata 语法)解释用户键入的参数”。我推断这就是为什么某些命令需要作为参数给出的变量列表以空格分隔而其他命令需要逗号分隔列表的原因。但是程序定义自己的语法而不是强制执行(参数)语法的想法似乎很奇怪。

另一个非常有趣的结构是宏定义和扩展的语法 (`macro') 以及明显没有其他语言中已知的局部变量。

是否有类似“Java 开发人员的 Stata”文档向具有我背景的人解释该语言的基本概念?

PS:如果这个问题似乎不清楚,请道歉。不幸的是,此时我无法提出更具体/明确的问题:(

最佳答案

我不完全确定你在寻找什么......但这里有一些相关的观点。 Stata 有点像编写 Unix shell 脚本或 Windows 批处理文件。每行执行一个命令,第一个单词是命令名。按照惯例,大多数命令具有以下结构:

command [varlist] [=exp] [if expression] [in range] [weight] [using filename] [, options]

方括号 [.] 表示它是可选的(或不可用,取决于命令)。有些命令可以加前缀(如 by:xi:svy: )Stata Corp 和有经验的用户的命令语法非常一致。但是,因为 Stata 用户也会编写命令,所以您偶尔会看到一些古怪的东西。

当 Stata 用户编写命令时,它们被保存在 .ado 文件(不是 .do)中,并使用 program 定义。命令。 (参见 help program 和手册的“Ado 文件”部分。)编写命令类似于用其他语言(例如 MatLab)编写函数
syntax command 用于帮助您编写自己的命令。当你执行一个命令时,命令名称后面的所有内容(上面的 command)都会在本地宏 `0' 中传递给程序。 .语法命令解析这个本地宏,所以你可以引用 `varlist'`if'等等。理论上,你可以解析 `0'您自己,但语法命令使您和您的用户更容易(只要您遵循常规语法)。我在底部放了一个例子。

我不知道您所说的“明显没有其他语言中已知的局部变量”是什么意思。宏在内存中存储单个字符串或单个数字。 Here's a comment我写了关于 Stata 的本地/全局宏的文章。它们确实是 Stata 编程语言的一个独特功能。正如它们的名字所暗示的那样,“本地”宏仅在指定程序(命令)或 .do 文件中可用,而“全局”宏在整个 Stata session 中可用。

我发现,一旦我习惯了 Stata 中的宏,我就开始怀念其他语言的宏。它们非常方便。除了(本地/全局)宏和主数据集,您还可以使用 scalar 将“事物”存储在内存中。和 matrix命令(以及一两个其他晦涩难懂的东西)。

我希望这会有所帮助。 Here's a list resources这可能会有所帮助。

例子:
program define myprogram
syntax varlist [if], [hello(string) yes]
macro list _0 _varlist _if _hello _yes
summarize `varlist' `if'
display "Here's the string in my hello option: `hello'"
if !missing("`yes'") di "Yes is on"
else di "Yes is off"
end

sysuse auto.dta
myprogram rep78 headroom if price > 5000 , hello("world") yes

关于programming-languages - 没有语法的Stata编程语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5951168/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com