如何访问和操作Stata变量标签中的字符串?

时间:2014-05-26 10:16:49

标签: stata

我有一个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()。是因为我试图让它成为一个本地宏吗?我看到的例子用它来生成数据集中的变量,但我正在处理变量标签。 我在正确的方向吗?我该如何解决这个错误?

1 个答案:

答案 0 :(得分:2)

您需要的语法是

local commapos = strpos("`label'", ",")` 

,同样适用于substr()

请注意在" "中附加标签文字所需的额外错误。其他地方也需要这样做。

冒号语法用于扩展宏函数,而不是一般的函数。

(学习如何自动化这是一个很好的抱负,但如果问题是这个大小,交互使用varm本来会更快。)