有没有办法验证在多个数据集中是否一致地定义了值标签?

时间:2018-03-14 01:16:03

标签: stata

我有许多数据集,其面板标识符是标记的整数。这些文件由几位共同作者和RA组成,所以我担心价值标签不一致,合并错误。例如,如果Firm ABC为1和11.数据为xtset,因此不能将这些数据存储为字符串。

有没有办法检查给定变量,值标签在数据集中是否一致?手动检查的面板和数据集太多了。

这是我试图避免的一个玩具示例:

clear
tempfile f1
clear
input id
1 
2
end
label define idlab 1 "One" 2 "Two"
lab val id idlab
save `f1'

clear
input id
1 
2
end

label define idlab 1 "Three" 2 "Four"
lab val id idlab

merge 1:1 id using `f1', nogen

list, clean noobs

1 个答案:

答案 0 :(得分:1)

我认为您可以使用value labellabel macro extended functions来验证数据集中的值标签是否一致。我的策略是:

  1. 使用我认为更合适的标签值加载数据集。
  2. 遍历所有数据集
  3. 获取变量id
  4. 的所有值
  5. 使用value label宏功能
  6. 获取标签值的名称
  7. 使用id宏函数
  8. 获取label的每个值的标签
  9. 比较"足够"带有此数据集的值标签的值标签
  10. 如果您检测到某个值的标签不同,您可以执行某些操作来更改它。

    这是用您的玩具代码验证的策略:

    clear
    tempfile f1
    clear
    input id
    1 
    2
    end
    label define idlab 1 "One" 2 "Two"
    lab val id idlab
    levelsof id, local(values_id) 
    global labelvname1 : value label id
    
    foreach x of local values_id{
        global labelvname1_`x' : label ${labelvname1} `x'
    }
    save `f1'
    
    clear
    input id
    1 
    2
    end
    
    label define idlab 1 "Three" 2 "Four"
    lab val id idlab
    
    global labelvname2 : value label id
    foreach x of local values_id{
        global labelvname2_`x' : label ${labelvname2} `x'
        if "${labelvname1_`x'}"!="${labelvname2_`x'}"{
            display "Label values are different for value `x'"
        }
    
    }
    

    我希望这有帮助。