首页 文章

Stata:如何修改字符串变量中的某些值但保留原始值?

提问于
浏览
0

我正在处理一个非常大的数据集(100万个障碍物) .

我有一个字符串日期,看起来像这样

key seq startdate (string)  
AD07    1   August 2011 
AD07    2   June 2011   
AD07    3   February 2004   
AD07    4   November 2004   
AD07    5   2001    
AD07    6   January 1998    
AD5c23  1   January 2014    
AD5c235 2   February 2014   
AD5c235 3   2014

这些是自我报告的就业日期 .

有些人没有报告他们开始的月份 . 但我想将 AD07 日期“2001”替换为“2001年1月” . 因此我不能简单地替换它,因为我想保留原始年份,但在字符串变量中添加月份 .

我开始时:

levelsof start if start<="2016", local(levels)

这让我从1900年到2016年没有这个月的所有年份 .

现在我想在没有月份的情况下添加“1月”,并保留原始年份 .

如果不每年使用 replace ,我该怎么做? foreach 循环?

1 回答

  • 0

    如果人们声称自己在1900年开始工作并且从那时起每年开始工作,那么您就会遇到严重的数据质量问题!即使考虑到早期就业开始和延迟退休,这意味着人们的年龄大于最老的年龄 .

    此外,由于几乎所有的工作时间都会比以往任何时候都长,所以“1月”的推算会产生偏见 . 真正的1月开始将是正确的,但没有其他人:“六月”或“七月”或随机月份将使更明显的统计意义 .

    也就是说,这里不需要循环 . 你说要求一条线

    replace startdate = "January " + startdate if length(trim(date)) == 4
    

    要么

    replace startdate = "January " + startdate if real(startdate) < .
    
    • 假设跟进转换为数字日期 . 逻辑是,所有仅限年份的日期减少到4个字符,或者(更好)将月份名称提供给 real() 将产生缺失 .

    反过来说,创建一个新变量比覆盖一个变量更好 . 另外,请考虑丢掉月份细节 . 需要它吗?

    编辑

    如果同一年没有月份规格的人有两个或两个以上的工作,您可能会遇到其他问题 . 您不希望将所有月份归为“1月” . 你可以通过检查这些观察结果

    gen byte incomplete = real(startdate) < . 
    gen year = substr(trim(startdate), -4, 4) 
    bysort key year incomplete : gen byte multiplebad = incomplete & _N > 1
    

相关问题