blu*_*ubb 2 language-features programming-languages stata
我最近从程序/ OO /功能背景进入Stata,并且无法理解该语言的基本元素.
例如,我发现有一个syntax命令"允许程序解释用户根据语法键入的参数,例如标准的Stata语法".我推断这就是为什么某些命令要求作为参数给出的变量列表由空格分隔而其他命令需要以逗号分隔的列表的原因.但是,定义自己的语法而不是强制执行(参数)语法的程序的想法似乎很奇怪.
另一个非常有趣的构造是宏定义和扩展(`macro')的语法以及其他语言中已知的局部变量的明显缺失.
是否有类似"Stata for Java developers"的文档向我的背景人员解释语言的基本概念?
PS:如果这个问题似乎不清楚,请道歉.不幸的是,我现在无法提出更具体/明确的问题:(
小智 9
我不确定你在寻找什么......但这里有一些相关的观点.Stata有点像编写Unix shell脚本或Windows批处理文件.每行执行一个命令,第一个单词是命令名.按照惯例,大多数命令具有以下结构:
command [varlist] [=exp] [if expression] [in range] [weight] [using filename] [, options]
Run Code Online (Sandbox Code Playgroud)
括号[.]表示它是可选的(或不可用,具体取决于命令).一些命令可以前缀(如by:,xi:或svy:)的塔塔集团和有经验的用户命令的语法是相当一致的.但是,因为Stata用户也会编写命令,所以偶尔会看到一些古怪的东西.
当Stata用户编写命令时,它们将保存在.ado文件(而不是.do)中,并使用该program命令进行定义.(请参阅help program本手册的"Ado文件"部分.)编写命令类似于用其他语言编写函数(例如,MatLab)
该syntax命令用于帮助您编写自己的命令.执行命令时,命令名称(command上面)后面的所有内容都将传递给本地宏中的程序`0'.syntax命令解析此本地宏,以便您可以引用`varlist'或`if'依此类推.从理论上讲,您可以解析`0'自己,但语法命令使您和您的用户更容易(只要您遵循传统语法).我在底部举了一个例子.
我不清楚你的意思是"显然没有其他语言中已知的局部变量".宏在内存中存储单个字符串或单个数字. 这是我写的关于Stata的本地/全球宏的评论.它们确实是Stata编程语言的独特功能.正如其名称所暗示的那样,"本地"宏仅在指定程序(命令)或.do文件中可用,而"全局"宏在整个Stata会话中可用.
我发现,一旦我习惯了Stata中的宏,我开始想念其他语言.它们非常方便.除了(本地/全局)宏和主数据集之外,您还可以使用scalar和matrix命令(以及一个或两个其他模糊的东西)将"东西"存储在内存中.
例:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1229 次 |
| 最近记录: |