使用 foreach 和 substr() 修改变量名
Using foreach with substr() to modify variable names
我有一组变量,其名称具有相同的前缀附加到唯一的两位数年份:
div_unemp03
div_unemp04
.
.
.
div_unemp14
我想将这些变量重命名如下:
div_ue03
div_ue04
.
.
.
div_ue14
我尝试使用 foreach
循环来执行此操作:
foreach x of var unemp* {
local new = substr(`x', 10, 2)
rename `x' div_ue`new'
}
然而,Stata 产生错误代码:
type mismatch
如能帮助理解此错误以及如何达到预期效果,我们将不胜感激!
substr
函数需要一个 string 作为它的第一个参数。此外,您的 varlist 语法 unemp*
不会捕获名为 div_unemp##
的变量,因为它们不会 begin with unemp
(生成 "type mismatch" 错误)。下面的(可重现的)示例显示了两个更正。
clear
input div_unemp03 div_unemp04 div_unemp05
1 1 1
end
foreach x of varlist *unemp* {
local new = substr("`x'", 10, 2)
rename `x' div_ue`new'
}
另请注意,substr()
允许您从字符串的 end 开始计数,因此 substr("s", -2, 2)
有效。
只需使用 rename
命令,您就可以在一行中完成相同的操作:
clear
set obs 1
forvalues i = 3 / 6 {
generate div_unemp0`i' = .
}
list, abbreviate(11)
+-------------------------------------------------------+
| div_unemp03 div_unemp04 div_unemp05 div_unemp06 |
|-------------------------------------------------------|
1. | . . . . |
+-------------------------------------------------------+
rename div_unemp# div_ue#
list, abbreviate(10)
+-------------------------------------------+
| div_ue03 div_ue04 div_ue05 div_ue06 |
|-------------------------------------------|
1. | . . . . |
+-------------------------------------------+
我有一组变量,其名称具有相同的前缀附加到唯一的两位数年份:
div_unemp03
div_unemp04
.
.
.
div_unemp14
我想将这些变量重命名如下:
div_ue03
div_ue04
.
.
.
div_ue14
我尝试使用 foreach
循环来执行此操作:
foreach x of var unemp* {
local new = substr(`x', 10, 2)
rename `x' div_ue`new'
}
然而,Stata 产生错误代码:
type mismatch
如能帮助理解此错误以及如何达到预期效果,我们将不胜感激!
substr
函数需要一个 string 作为它的第一个参数。此外,您的 varlist 语法 unemp*
不会捕获名为 div_unemp##
的变量,因为它们不会 begin with unemp
(生成 "type mismatch" 错误)。下面的(可重现的)示例显示了两个更正。
clear
input div_unemp03 div_unemp04 div_unemp05
1 1 1
end
foreach x of varlist *unemp* {
local new = substr("`x'", 10, 2)
rename `x' div_ue`new'
}
另请注意,substr()
允许您从字符串的 end 开始计数,因此 substr("s", -2, 2)
有效。
只需使用 rename
命令,您就可以在一行中完成相同的操作:
clear
set obs 1
forvalues i = 3 / 6 {
generate div_unemp0`i' = .
}
list, abbreviate(11)
+-------------------------------------------------------+
| div_unemp03 div_unemp04 div_unemp05 div_unemp06 |
|-------------------------------------------------------|
1. | . . . . |
+-------------------------------------------------------+
rename div_unemp# div_ue#
list, abbreviate(10)
+-------------------------------------------+
| div_ue03 div_ue04 div_ue05 div_ue06 |
|-------------------------------------------|
1. | . . . . |
+-------------------------------------------+