2014-03-01 14 views
0

我花了很多時間去做一些應該很簡單的事情。我試圖將一組變量改爲具有相同的名稱,但在結尾處使用了不同的字母。我不理解數組是如何工作的或者是什麼:我的語法可能有多個錯誤,因爲我對Stata非常不熟悉。我一直在谷歌搜索幾個小時,無法弄清楚這一點,需要離開電腦一段時間。重命名一組變量並連接後綴時出現多個錯誤

local letters `" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" "' 
local i 1 
local swap " " 

foreach var of varlist q5_a-q5_o { 
    local letter : word `i' of `letters' //select the 1st value in the array which is 'a' 
    replace `swap' = "aspects" + "_" + `letter' //change swap to read 'aspects_a' 
    rename `var' `swap' //rename 'q5_a' to 'aspects_a' 
    local `i' = `i' + 1 //add one to 'i' so that the next loop will change 'q5_b' to 'aspects_b' 
} 
+3

一般評論:谷歌搜索可以是非常間接的。你想重命名變量。您需要的所有東西都在Stata的「rename」幫助中或附近。在這裏谷歌搜索就像走到圖書館去瀏覽你想要的東西在你已有的書中。 –

+0

我明白你的意思了。我有幾種其他編程語言的經驗,但我在C++中尋找解決方案的方法顯然不適用於Stata。我想我需要花一些時間來閱讀Stata的幫助,這裏的語法不同於「隨我去走」,證明時間浪費和令人沮喪 – jamzsabb

回答

4

As @Dimitriy V.Masterov指出,rename(在Stata 12上)能夠進行多次重畫。

事實上,

renpfix q5 aspect 

似乎是你想要的。

本答案的其餘部分重點介紹您的方法出了什麼問題。在你的情況,你第一次調用

replace `swap' = 

本地宏swap只是空間,所以塔塔看到

replace = 

這是違法的。但是在這裏使用replace的想法是錯誤的。這根本不是如何改變本地宏。總之,你誤讀replace作爲一種操縱字符串的方法。這是一種改變變量內容的方法。

local letters `c(alpha)' 
local i = 1 

foreach var of varlist q5_a-q5_o { 
    local letter : word `i' of `letters' 
    rename `var' aspects_`letter' 
    local i = `i' + 1 
} 

應該工作。在這裏,我們正在利用小寫字母「a」到「z」已經在c(alpha)中的事實:在creturn list的輸出結尾看到其他有用的零碎。這可以縮短:

local letters `c(alpha)' 
local i = 1 

foreach var of varlist q5_a-q5_o { 
    local letter : word `i++' of `letters' 
    rename `var' aspects_`letter' 
} 

和時間更短:

local i = 1 

foreach var of varlist q5_a-q5_o { 
    local letter : word `i++' of `c(alpha)' 
    rename `var' aspects_`letter' 
} 

和更短的仍然

foreach letter in `c(alpha)' { 
    rename q5_`letter' aspect_`letter' 
} 

但正如前面暗示這是renpfix爲你所做的任何方式。

+0

太棒了!非常感謝你,我正在學習Stata爲一個課程的研究項目,我知道必須有一種比每次更改每個變量更簡單的方法。你的答案很好,我可以用它來重命名其他變量,非常感謝! – jamzsabb

3

嘗試組重命名:rename q5* aspects*。如果這不是您想要的,請給出一些當前變量名稱及其所需新名稱的示例。

相關問題