2013-09-30 30 views
1

我有一個目前看起來像這樣的代碼:塔塔:用繩子來代替數值高效的路值

replace fname = "JACK" if id==103 
replace lname = "MARTIN" if id==103 

replace fname = "MICHAEL" if id==104 
replace lname = "JOHNSON" if id==104 

而且持續了多頁這樣,與第一和最後一個名稱替換ID名稱串。我想知道是否有更有效的方法來做到這一點,也許通過使用recode命令?

回答

1

我會迴應其他答案,暗示merge是做到這一點的最佳方法。

但是,如果你絕對必須按項目編碼(再次混亂),你可以通過使用MS Excel「幫助」你編寫代碼來生成一個長列表(「頁面」)replace命令。這是您的Excel工作表的一個例子的畫面,顯示了MS Excel公式:

 columns: 
      A   B  C  D 
row: 1 last  first id code 
    2 MARTIN JACK 103 ="replace fname=^"&B2&"^ if id=="&C2 

你的那種類型,確保它看起來像塔塔代碼時,公式計算(除了插入記號),然後複製D列中的公式直到列表的末尾。然後將由公式生成的D列中的Stata代碼塊複製到你的do文件中,然後做一個查找和替換(如果你在其他地方使用插入符號進行數學運算,請小心)!!與「,這將最終產生適當的Stata語法

(這是一個真正的蠻力方式,這樣做是不太動態的,因爲你的世代列表隨後發生變化。提前回答一個問題,在這裏主張使用Excel :))

0

創建IDS VS FNAME的關聯數組,L-NAME

103 => JACK,MARTIN 
104 => MICHAEL,JOHNSON 
... 

替換 ID =>散列{ID}(FNAME & L-NAME)

這樣做的效率將由被照顧使用的編程語言

+0

如何在Stata中創建'關聯數組'?我從來沒有見過這樣的語法 – Parseltongue

+0

原理很好,請注意,這不是,也不是呈現爲,任何種類的Stata語法。 –

+0

只有在您的情況下,該原理才能高效工作有一個矢量化的'粘貼'函數來連接而不循環。不記得Stata是否這樣做 - 它不在'h string_functions'中。所有這些當然都是爲了擺脫好的「字典」策略(尼克的回答)。 –

0

你沒有解釋你想添加的字符串來自哪裏,但通常最好的技術是什麼在

http://www.stata.com/support/faqs/data-management/group-characteristics-for-subsets/index.html

+0

我不習慣將它作爲一個單獨的文件 - 它增加了與同事發生錯誤的可能性。你知道如何實施Ram的戰略嗎? – Parseltongue

+0

合併過程可能是最快的解決方案。您始終可以爲同事保存並提供合併的數據文件,從而使他們無需重複此操作。 –

+0

我不明白如何使用單獨的文件比直接輸入字符串更容易出錯。無論哪種方式,這正是@拉姆的策略。 –