Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stata 删除冗余值标签_Stata_Labels - Fatal编程技术网

Stata 删除冗余值标签

Stata 删除冗余值标签,stata,labels,Stata,Labels,我有一个大数据集的一部分。许多变量包含值标签,但这部分数据集中不存在此类值。我想从数据集中删除多余的值标签。我尝试在斯塔塔使用各种方法来实现这一点,但没有成功 显然,这是行不通的: label drop X if X == 1 补充文本:到目前为止,我提出了以下不完美的解决方案,因为我需要在将来一次又一次地重复这个练习: 第一种(半手动): 第二(X是需要保留的标签代码。问题是我有多个标签代码需要保留): “显然”没有:这不是法律规范,原则上也没有意义。至多标签放置放置命名标签,但是标签的名

我有一个大数据集的一部分。许多变量包含值标签,但这部分数据集中不存在此类值。我想从数据集中删除多余的值标签。我尝试在斯塔塔使用各种方法来实现这一点,但没有成功

显然,这是行不通的:

label drop X if X == 1 
补充文本:到目前为止,我提出了以下不完美的解决方案,因为我需要在将来一次又一次地重复这个练习:

第一种(半手动):

第二(X是需要保留的标签代码。问题是我有多个标签代码需要保留):

“显然”没有:这不是法律规范,原则上也没有意义。至多
标签放置
放置命名标签,但是标签的名称和它们附加到的任何变量的名称并不一致,除非您以这种方式进行设置

这是可疑的:

  • 在大多数情况下,Stata不会使用大量内存来存储值标签。值标签的要点在于,值标签只需存储一次

  • 这类问题似乎意味着,值标签是在您出现之前设置的,并且每个值可能会找到一个要坚持的观察值。这很可能是明智的想法

  • 这是危险的:

  • 相同的值标签可以用于多个变量,因此原则上需要检查是否在使用特定集合的所有变量上使用

  • 如果使用类似的数据集进行
    追加
    合并
    ,您需要担心会发生什么。这可能会导致比你想要的更多的混乱

  • 不那么刺耳,但也值得一提的是,数据中没有的值标签对于图形化目的可能仍然有用

  • 所以,我不建议你怎么想。您可以尝试使用值标签对每个变量进行
    解码
    ,然后根据这些值进行
    编码。但是,值标签不一定按所需的顺序排列。默认情况下,
    encode
    将按字母顺序进行编码,最终会出现类似
    1“可接受”2“不好”3“好”或
    1“同意”2“不同意”3“中立”之类的废话。可以想象,最终得到的标签比开始时多

    有其他的方法可以很好地做到这一点,但这只是一个小项目

    执行摘要:对不起,这听起来不是个好主意

    编辑:这是从
    dataex
    中破解出来的。它应该适用于各种版本没有“明显”的说法:这不是法律规范,甚至在原则上也没有意义。至多
    标签放置
    放置命名标签,但是标签的名称和它们附加到的任何变量的名称并不一致,除非您以这种方式进行设置

    这是可疑的:

  • 在大多数情况下,Stata不会使用大量内存来存储值标签。值标签的要点在于,值标签只需存储一次

  • 这类问题似乎意味着,值标签是在您出现之前设置的,并且每个值可能会找到一个要坚持的观察值。这很可能是明智的想法

  • 这是危险的:

  • 相同的值标签可以用于多个变量,因此原则上需要检查是否在使用特定集合的所有变量上使用

  • 如果使用类似的数据集进行
    追加
    合并
    ,您需要担心会发生什么。这可能会导致比你想要的更多的混乱

  • 不那么刺耳,但也值得一提的是,数据中没有的值标签对于图形化目的可能仍然有用

  • 所以,我不建议你怎么想。您可以尝试使用值标签对每个变量进行
    解码
    ,然后根据这些值进行
    编码。但是,值标签不一定按所需的顺序排列。默认情况下,
    encode
    将按字母顺序进行编码,最终会出现类似
    1“可接受”2“不好”3“好”或
    1“同意”2“不同意”3“中立”之类的废话。可以想象,最终得到的标签比开始时多

    有其他的方法可以很好地做到这一点,但这只是一个小项目

    执行摘要:对不起,这听起来不是个好主意


    编辑:这是从
    dataex
    中破解出来的。亲爱的尼克,谢谢你的回答和建议。我完全理解您的担忧,但我不想再讨论为什么我需要去掉冗余(未使用)的值标签。今天我花了很多时间在这个问题上,但没有比一个一个半手动过程变量更好的解决方案了:fre-var;di r(实验室有效);标签下降变量;label define var“label 1”2“label 2”3“label 3”,修改。这是您的选择,但我不会花时间编写程序来实现一个坏主意。如果是这样,我认为这是值得解释的,这样您就知道这不是白做的。我需要以Excel格式和codebook分别向学生提供小数据集。有时,当某些变量的值标签大于500时,代码本非常长。这就是为什么对于用于教育目的的小型派生数据集,我需要通过删除冗余值标签来缩短代码本的原因。解释真正的问题使其更接近于解决问题。将您的数据集简化为示例数据集,然后运行
    dataex
    生成
    input
    和其他代码以复制它并
    保存
    结果。Nick,感谢您为此投入时间。提供的程序正是我所需要的。亲爱的尼克,谢谢你的回答和建议。我完全理解您的担忧,但我不想再讨论为什么我需要去掉冗余(未使用)的值标签。我今天花了很多时间在这个问题上,但没有比pro更好的解决方案
    fre var
    di r(lab_valid);
    label drop var;
    label define var 1 "Label 1" 2 "Label 2" 3 "label 3", modify.
    
    labellist var
    local min = r(var_min)
    local max = r(var_max)
    forval i = `min'/`max' {
        if `i' != X {
            label define var `i' "", modify
        }
    }
    
    *! 1.0.0 NJC 11apr2018 
    program showvaluelabelsused 
        version 15 
        syntax [varlist] 
    
        quietly ds, has(vallabel) 
    
        foreach v in `r(varlist)'  {
            local l : value label `v'
            local vlabels : list vlabels | l
        }
    
        foreach vl in `vlabels' {
            local alllevels
            qui ds , has(vallabel `vl')
            local vlist `r(varlist)'
            foreach v in `vlist' {
                qui levelsof `v', local(levels) missing
                local alllevels : list alllevels | levels
                dis as res "label values `v' `vl'"
            }
    
            foreach n in `alllevels' {
                local ltext : label `vl' `n', strict
                if `"`ltext'"' != "" {
                    if strpos(`"`ltext'"',char(34)) dis as res `"label def `vl' `n' `"`ltext'"', modify"'
                    else dis as res `"label def `vl' `n' "`ltext'", modify"'
                }
            }
        }
    end 
    
    . sysuse auto, clear
    (1978 Automobile Data)
    
    . showvaluelabelsused
    foreign
    label values foreign origin
    label def origin 0 "Domestic", modify
    label def origin 1 "Foreign", modify
    
    . keep if foreign
    (52 observations deleted)
    
    . showvaluelabelsused
    label values foreign origin
    label def origin 1 "Foreign", modify
    
    . webuse nlswork, clear
    (National Longitudinal Survey.  Young Women 14-26 years of age in 1968)
    
    . showvaluelabelsused
    label values race racelbl
    label def racelbl 1 "white", modify
    label def racelbl 2 "black", modify
    label def racelbl 3 "other", modify
    
    . keep if race == 2
    (20,483 observations deleted)
    
    . showvaluelabelsused
    label values race racelbl
    label def racelbl 2 "black", modify