首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stata:如何修改字符串变量中的一些值,但保留原始值?

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

Stack Overflow用户
提问于 2018-03-21 16:16:32
回答 1查看 268关注 0票数 0

我正在处理一个非常大的数据集(100万个数据集)。

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

代码语言:javascript
复制
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月”。因此,我不能简单地替换它,因为我希望保留原来的年份,但是在字符串变量中添加月份。

我一开始是:

代码语言:javascript
复制
levelsof start if start<="2016", local(levels)

这给了我从1900年到2016年的所有没有月的岁月。

现在我想在没有月份的年份加上“一月”,并保留原来的年份。

我应该如何在不每年使用replace的情况下做到这一点?foreach循环?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-21 16:42:34

你有一个严重的数据质量问题,如果人们声称是在1900年开始工作,从那时起每年!即使考虑到提前开始就业和推迟退休,这也意味着年龄超过最老的既定年龄的人。

另外,将“一月”归咎于偏见,因为几乎所有的工作时间都会比原来长。真正的一月开始将是正确的,但没有其他:“六月”或“七月”或随机月份将有更明显的统计意义。

也就是说,这里不需要循环。你要的是一行,比如说

代码语言:javascript
复制
replace startdate = "January " + startdate if length(trim(date)) == 4 

或

代码语言:javascript
复制
replace startdate = "January " + startdate if real(startdate) < . 

-假设在转换为数字日期时进行跟踪。这里的逻辑是,所有一年的日期缩减到4个字符,或者(更好的)将月份名称提供给real()将导致错误。

也就是说,创建一个新变量比重写一个变量更好。同时,考虑扔掉这个月的细节。需要吗?

编辑

如果在同一年中有两份或两份以上的工作没有月规格,你可能会有另一个问题。你不想把所有的月都归为“一月”。你可以通过

代码语言:javascript
复制
gen byte incomplete = real(startdate) < . 
gen year = substr(trim(startdate), -4, 4) 
bysort key year incomplete : gen byte multiplebad = incomplete & _N > 1 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49411488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档