美文网首页
Stata提取字符间之字符

Stata提取字符间之字符

作者: 哈桑_73bc | 来源:发表于2020-04-28 20:59 被阅读0次

    场景

    • 下图数据为受访者平均每周加班时长。基于研究目的,需将其换算为小时数。
       +------------------+
       | id          time  |
       |------------------ |
    1. |  1   4小时12分钟   |
    2. |  2    5小时3分钟   |
    3. |  3   6小时45分钟   |
    4. |  4   16小时3分钟   |
       +------------------+
    

    思路

    • 将数据中的小时数分钟数分别提取出来,进而通过公式计算。例如,个体1的加班时长为4+12/60=4.2小时
    • 但如何分别提取小时数和分钟数呢?或许读者会认为用 substr(s,n1,n2)不就行了吗?
    • 真的是这样吗?笔者注意到,部分个体的小时数只有个位,而有的个体的小时数却有两位数,那么参数n2是输入2,还是4呢?显然,简单地使用substr()达不到目的。

    如下为笔者的尝试

    • 导入数据
    clear 
    input str5 id str20 time
    1 4小时12分钟
    2 5小时3分钟
    3 6小时45分钟
    4 16小时3分钟
    end
    
    • 删除“分钟”字符串
    gen time1 = subinstr(time,"分钟","",.)
    list id time time1
    
         +----------------------------+
         | id          time     time1 |
         |----------------------------|
      1. |  1   4小时12分钟   4小时12  |
      2. |  2    5小时3分钟    5小时3  |
      3. |  3   6小时45分钟   6小时45  |
      4. |  4   16小时3分钟   16小时3  |
         +----------------------------+
    
    • 提取小时数 hour
    egen hour = ends(time1),punct("小")   //提取字符“小”之前的字符
    list id time time1 hour
    
         +-----------------------------------+
         | id          time     time1   hour |
         |-----------------------------------|
      1. |  1   4小时12分钟   4小时12      4  |
      2. |  2    5小时3分钟    5小时3      5  |
      3. |  3   6小时45分钟   6小时45      6  |
      4. |  4   16小时3分钟   16小时3     16  |
         +-----------------------------------+
    
    • 提取小时数 minute
    egen minute = ends(time1),punct("时") last  //提取字符“时”之后的字符
    list id time time1 hour minute
    
         +--------------------------------------------+
         | id          time     time1   hour   minute |
         |--------------------------------------------|
      1. |  1   4小时12分钟   4小时12      4       12  |
      2. |  2    5小时3分钟    5小时3      5        3  |
      3. |  3   6小时45分钟   6小时45      6       45  |
      4. |  4   16小时3分钟   16小时3     16        3  |
         +--------------------------------------------+
    
    • 计算加班时长 overtime
    destring hour ,gen(hour1) float force   //转换变量类型
    destring minute ,gen(minute1) float force
    gen overtime = hour1+minute1/60
    list id time time1 hour minute overtime
    
    
         +-------------------------------------------------------+
         | id          time     time1   hour   minute   overtime |
         |-------------------------------------------------------|
      1. |  1   4小时12分钟   4小时12      4       12        4.2  |
      2. |  2    5小时3分钟    5小时3      5        3       5.05  |
      3. |  3   6小时45分钟   6小时45      6       45       6.75  |
      4. |  4   16小时3分钟   16小时3     16        3      16.05  |
         +-------------------------------------------------------+
    
    
    • 这是笔者在实践中遇到的问题,如果您有更好的解决方案,欢迎在下方留言。

    相关文章

      网友评论

          本文标题:Stata提取字符间之字符

          本文链接:https://www.haomeiwen.com/subject/wbtcehtx.html