2015-12-16 60 views
1

我在Stata中生成一列隨機數,嘗試使用不同的種子來查看哪一個給出最佳結果。我創建了250個隨機數並將它們粘貼到下面看到的foreach循環的代碼中。省略號代表~240顆種子。作爲標量或宏的Stata訪問矩陣的元素

save "`datadir'ProviderCounty", replace 

foreach x in 89583 31214 65326 61107 54662 91414 86171 14809 19625 . . . 74397 85273 { 

    use "`datadir'ProviderCounty", replace 
    display `x' 
    set seed `x' 
    generate rannum = uniform() 
    . . . 
} 

我想通過從Excel讀取他們進入這樣一個矩陣,然後由一個通過矩陣迭代一個更換250個號碼的是長線。

* Import seeds randomly generated in Excel 
clear 
import excel "`datadirIN'Random Number Seeds.xlsx", sheet("Sheet1") cellrange(A2:A252) firstrow 
mkmat Seeds, matrix(matSeeds) 
scalar mlen = rowsof(matSeeds) 
clear 

這將在以「save ...」開頭的行之間。和每條線。我不知道該怎麼做是迭代矩陣。我需要一行用迭代遍歷矩陣的行替換foreach行,並將種子編號放入宏「x」中。

回答

6

我希望我是誤會,但其背後的想法似乎是錯誤的。使用特定種子的唯一優點是確保詳細結果的可重複性,因爲使用相同程序和相同數據的其他人至少可以確信得到相同的結果(並且因此有辦法確切地檢查您做了什麼) 。否則,如果結果敏感地依賴於特定的種子,那麼樣本量太小,或者問題太脆弱,任何結果都不可信。你打算怎麼報告這個?如果你壓制你必須尋找合適結果的事實,那麼這將被廣泛認爲是不可接受的。如果你宣傳這個事實,你公佈的結果被標記爲可疑和無用之間。我建議酌情與主管,導師或同事討論你的想法。如果他們提出這個建議,解釋爲什麼你認爲這是一個好主意,無論你在哪裏展示結果,都是需要的。

所有這一切說,Stata的矩陣具有行和列,使得給定的列向量,其元素是一般matname[, 1]。在Stata矩陣的任何文檔中定義了下標,例如, http://www.stata.com/help.cgi?matrix

所以循環中,您似乎在暗示可能會

mkmat Seeds, matrix(matSeeds) 

forval i = 1/`= rowsof(matSeeds)' { 
    ... 
    set seed `= matSeeds[`i', 1]' 
    ... 
} 

http://www.stata.com/help.cgi?macro文件上的蒼蠅(在這種情況下)的評估標量和矩陣元素。

編輯:此處使用的語法記錄在help macrohttp://www.stata.com/manuals14/pmacro.pdf。這裏有一個例子:

. mat foo = J(1, 1, 42) 

. set seed `=foo[1,1]' 

. display c(seed) 
X51535c3ec43f462544a474abacbdd93d386b 

. mat foo = J(1, 1, 666) 

. set seed `=foo[1,1]' 

. display c(seed) 
X97b5c5aec43f462544a474abacbdd93d2d9c 

這裏的根本問題是set seed本身並不評估輸送到它的表達。有各種解決方法,包括定義一個本地宏,然後鍵入一個宏引用。 Stata的工作方式是在set看到其參數之前對宏進行評估。此處顯示的語法通過即時評估來刪除宏。

這裏所用的情況是,其中expansion_optr是一個等號接着EXP,即待求值的表達式=。在這種情況下,表達式只是一個矩陣元素。

+0

感謝您的判斷和錯誤。 http://www.stata.com/help.cgi?matrix在等號之前不顯示左引號?似乎很奇怪。 – Snodgras

+4

你可以解釋爲什麼你認爲我的評論是錯誤的或不相關的。聽到你的聲音是不受歡迎的,但是「嘗試使用不同的種子來看看哪一個能給出最好的結果」是不合格的,它是對基於隨機數生成的模擬點的典型誤解。否則,我的評論就不會持續。 –

+2

什麼令你困惑的語法?它是'set'的語法,與'matrix'本身無關。你試過了嗎?你嘗試了你猜測的語法嗎?再次,駁斥不正確的想法是受歡迎的。 –