Stata:重命名变量

时间:2013-03-12 02:22:27

标签: rename stata

我有很多变量,如:

slsoke slsoke_g jfue jfue_g iii iii_g bsueo bsueo_g ...

还有其他变量没有该对,例如hid,pid,......

我必须删除不以_g结尾的变量,并将“_g”变量重命名为没有_g的变量。因此,例如,“slsoke”的值应该是过时的,“slsoke”应该是“slsoke_g”的精确副本。如何编写代码来对Stata进行更改?

2 个答案:

答案 0 :(得分:2)

您可以写下这样的内容:

// example

clear
set obs 50
gen hid = _n
gen pid = floor(_n/5)
local y = "slsoke jfue iii bsueo"
foreach x of local y {
    gen `x' = runiform()
    gen `x'_g = int(10 * `x')
}

// the code

local k ""

qui d, varl
local l = r(varlist)
foreach x of local l {
    cap qui replace `x' = `x'_g
    if !_rc local k = "`k' `x'"
}

di as err "`k'"
keep `k'

// bye

智能正则表达式可能有一个更短的解决方案。

答案 1 :(得分:2)

这里最困难的是获取以_g结尾的所有变量名的前缀。这可以这样做:

unab which : *_g 
local which : subinstr local which "_g " " ", all 

细节至关重要。您正在寻找名称末尾的_g,因此需要额外的空间,但您也需要更换空间。现在,您可以遍历这组前缀:

foreach w of local which { 
     drop `w'_g 
     rename `w' `w'_g 
} 

(LATER EDIT)也许你想要更像这样的东西。

foreach w of local which { 
    replace `w' = `w'_g 
    drop `w'_g 
    rename `w' `w'_g 
} 

无论你想要什么,如前所述,获取前缀似乎是最困难的一点,其余的是前缀上的循环。