2011-05-10 127 views
2

我最近從程序/ OO /功能背景進入Stata,並且無法理解該語言的基本元素。Stata編程語言沒有語法?

例如,我發現有一個syntax命令「允許程序根據語法解釋用戶輸入的參數,如標準Stata語法」。我推斷這就是爲什麼某些命令需要一個變量列表作爲參數給出的空格分隔,而另一些需要逗號分隔的列表。但是程序定義自己的語法而不是被強制實施的(參數)語法的想法似乎很奇怪。

另一個非常有趣的構造是宏定義和擴展的語法(`macro')以及在其他語言中已知的局部變量的明顯缺失。

有什麼樣了「的Stata爲Java開發人員」文件,解釋語言的基本概念,給人以我的背景是什麼?如果這個問題看起來不太清楚,請道歉。不幸的是,我不能制定在這一點上更具體的/清楚的問題:(

+0

是你的問題只是「有一個很好的快速入門指南」?或者你想知道一些有關語言功能的內容嗎?無論哪種情況,至少目前來說,您可能不需要這些編程功能。 – Marcin 2011-05-10 14:33:38

+0

@Marcin:我想理解語言,而不是僅僅將它應用於某個問題。是什麼讓你覺得我不需要這些功能?我應該從一個使用這些功能的同事手中接過代碼庫,這就是我發現它們的方式...... – blubb 2011-05-10 15:55:14

+0

我認爲這是因爲我熟悉使用這些功能的其他語言。除非你的語言非常非常時髦,否則不會有任何積極地需要它們的計算。在嘗試在新代碼中部署這些功能之前,請先了解其他語言。 – Marcin 2011-05-10 16:27:05

回答

8

我不完全相信你在找什麼......但這裏的一些相關的要點。塔塔是一種像寫一個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宏,我開始懷念他們在其他語言。他們非常方便。除了(本地/全局)宏和主數據集之外,還可以使用scalarmatrix命令(以及一兩個其他模糊的事物)將「事物」存儲在內存中。

我希望有幫助。 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 
+0

你釘了它。這加上你在另一個問題上的答案解開了結。謝謝! – blubb 2011-05-10 20:24:52

1

幾本書提供的 「用於Y的X用戶」 的方法,但一般在統計的軟件解決方案。關於你的問題,我會建議先使用本能。

我開始閱讀(編程和標記)代碼,大約十年前,即使我不能代碼,大量的語言,我可以相當容易地讀取幾種語言。我發現塔塔容易,因爲最核心的命令很簡單,與像overifreplace復發可選語句(採取自願多樣化的報表),很容易理解,然後申請。

當我教Stata時,我總是遇到問題,讓學生儘可能多地使用help頁(我喜歡他們可以很容易訪問的事實,就像在R中一樣)。我通過考慮我可以直接閱讀語法指示的事實來解釋這個悖論。先前對您的問題的回覆非常好地涵蓋了語法。

額外的努力在於打開[R],[U]和特別是[P]手冊,在utilities夾設有Stata的。這裏有很多細節,這對程序員和培訓統計人員都很有用。這是我學會了用宏和循環,超出了命令一樣local/globalforeach/while明顯的邏輯(如果我理解正確的術語,塔塔是圖靈完備)。

塔塔有時有點痛的,當涉及到使用宏循環單/雙引號,但它是非常簡單的,否則。玩的開心!