我不完全相信你在找什麼......但這裏的一些相關的要點。塔塔是一種像寫一個Unix 。shell腳本或Windows批處理文件中的每一行執行的命令,並且第一個單詞是命令名稱按照慣例,大多數命令具有以下結構:[]
command [varlist] [=exp] [if expression] [in range] [weight] [using filename] [, options]
支架意味着它是可選的(或不可用,根據命令)。一些命令可以前綴(如by:
,xi:
,或svy:
)由塔塔公司和有經驗的用戶命令的語法是相當一致的。但是,由於Stata用戶也會寫命令,偶爾會看到古怪的東西。
當用戶的Stata寫入命令,它們被保存在.ado文件(未。做),並使用該命令program
定義。 (見help program
和手動的「阿土文件」部分。)寫命令是類似於寫在其他語言的函數(例如,MATLAB)
的syntax
命令是用來幫助你編寫自己的命令。執行命令時,命令名稱後面的所有內容(command
)都會被傳遞給本地宏程序`0'
中的程序。語法命令分析此本地宏,以便您可以參考`varlist'
或`if'
等。從理論上講,你可以自己解析`0'
,但語法命令使你和你的用戶更容易(只要你遵循傳統的語法)。我在底部舉了一個例子。
我並不確切地知道你的意思是「明顯缺乏局部變量在別的語言。」宏在內存中存儲單個字符串或單個數字。 Here's a comment我寫了關於Stata的本地/全局宏。他們確實是Stata編程語言的一個獨特功能。顧名思義,「本地」宏只能在指定的程序(命令)或.do文件中使用,而「全局」宏在整個Stata會話中可用。
我發現,一旦我習慣了在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
是你的問題只是「有一個很好的快速入門指南」?或者你想知道一些有關語言功能的內容嗎?無論哪種情況,至少目前來說,您可能不需要這些編程功能。 – Marcin 2011-05-10 14:33:38
@Marcin:我想理解語言,而不是僅僅將它應用於某個問題。是什麼讓你覺得我不需要這些功能?我應該從一個使用這些功能的同事手中接過代碼庫,這就是我發現它們的方式...... – blubb 2011-05-10 15:55:14
我認爲這是因爲我熟悉使用這些功能的其他語言。除非你的語言非常非常時髦,否則不會有任何積極地需要它們的計算。在嘗試在新代碼中部署這些功能之前,請先了解其他語言。 – Marcin 2011-05-10 16:27:05