【问题标题】:Extract value label in command [stata]在命令 [stata] 中提取值标签
【发布时间】:2018-04-19 13:28:59
【问题描述】:

我正在尝试创建一个新的 string 变量,它将 stringreal 数字(ID)与名称组合在一起。名称是带有value labelnumeric 变量。

示例数据如下:

* Input Data
clear
input long num id
1 689347
2 972623
end
label values num num
label def num 1 "Label A" 2 "Label B"

 +------------------+
 |     num       id |
 |------------------|
 | Label A   689347 |
 | Label B   972623 |
 +------------------+

我想做的是创建一个string 类型的689347 - Label A。这很容易做到,只需在num 上使用decode,然后编写一个新的string,如下所示:

tempvar numstr
decode num, gen(`numstr')
gen label = string(id) + " - " + `numstr'

 +-------------------------------------+
 |     num       id              label |
 |-------------------------------------|
 | Label A   689347   689347 - Label A |
 | Label B   972623   972623 - Label B |
 +-------------------------------------+

这已经很容易了,但是有没有办法在一行中做到这一点,而不需要decode 命令?

例如:

gen label = string(if) + " " + string(num)

问题在于,当然,这只会给出num 所采用的real 数值(1 和2)的string

this post 中,您可以看到如何在if 命令中引用value label

我的问题是:

有没有办法告诉 Stata 创建一个字符串并提取 value label 而不是值?

【问题讨论】:

    标签: label stata decode


    【解决方案1】:

    我能做的最好是两条线。

    decode num, generate(label)
    replace label = string(id) + " - " + label
    

    【讨论】:

    • 这与我在问题中已有的解决方案完全相同,但没有 tempvar(这意味着我需要添加第三行来删除 label 变量.
    • @AaronWolf 这不完全相同。这是两行而不是三行。你为什么要放弃label
    • 啊,对不起,我知道你在那里做了什么。是的,这可能是我们能做的最好的了。
    【解决方案2】:

    如果您不想使用decode,那么这样做可以解决问题:

    generate label = ""
    
    forvalues i = 1 / 2 {
        replace label = string(id) + " - " + "`: label num `i''" in `i'
    }
    

    【讨论】:

    • 注意暗示,您需要循环观察,因为相关的值标签会因观察而异(除非所有值都具有相同的值标签)。
    • 这也比我提出的解决方案更密集。重点不是我对decode 过敏。关键是是否有办法在一行而不是三行上做到这一点。
    • 在你的帖子中你问:“......有没有办法在一行中做到这一点,没有解码命令?......”。没有一个可以在一行中完成,但有一个(上面)可以在没有decode 的情况下完成。
    • 顺便说一句,我没有看到你的问题中表达的任何关于强度的担忧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多