我有一个Stata数据集,其中包含描述测量年份的变量标签。我需要从变量访问测量年份,以便稍后使用显示年份的后缀重命名每个变量。例如,V95
标签为GNP/CAPITA,75
,我想将其重命名为gnp_capita_75
。有些变量有像GNP/C:GROWTH RTS,60-75
这样的标签,我想把逗号后面的间隔的中点添加到变量名。
到目前为止,我访问变量标签的代码如下所示:
local varlist V1 V2 V3 V28 V29 V30 V85 V86 V87 V88 V89 V90 V91 V92 V93 V94
foreach variable in `varlist' {
//get the label of the variable
local label : var label `variable'
//find the position of the comma
local commapos : strpos(`label', ",")
//find the stub before the comma
local namestub : substr(`label', 1, `commapos' - 1)
//find year after the comma
local year : substr(`label', `commapos' + 1, `commapos' + 2)
//replace any illegal character (%,/,:," ") with underscores:
local namestub : subinstr(`namestub', "%", "_")
local namestub : subinstr(`namestub', "/", "_")
local namestub : subinstr(`namestub', ":", "_")
local namestub : subinstr(`namestub', " ", "_")
//rename variable with the new stub and the year
rename `variable' `namestub'`year'
}
我收到错误,说不允许使用strpos()。是因为我试图让它成为一个本地宏吗?我看到的例子用它来生成数据集中的变量,但我正在处理变量标签。 我在正确的方向吗?我该如何解决这个错误?
答案 0 :(得分:2)
您需要的语法是
local commapos = strpos("`label'", ",")`
,同样适用于substr()
。
请注意在" "
中附加标签文字所需的额外错误。其他地方也需要这样做。
冒号语法用于扩展宏函数,而不是一般的函数。
(学习如何自动化这是一个很好的抱负,但如果问题是这个大小,交互使用varm
本来会更快。)