STATA、EXCEL、PYTHON处理时间变量使之能够加减计算的方法是:以某一个时间线为基准(如STATA以1960年1月1日为基准),计算指定时间与基准时间的“相隔天数/月数/季度数/年数”,通过“相隔”数来进行加减计算。
大部分被导入STATA的时间变量不会被自动识别为时间变量(这句话可能是我乐观了),需要进行字符串到“相隔”数值的转换。
但是因为“相隔”数对使用者来说本身是没有意义的,所以还需要format 进行一下格式上的转化,简单来讲就是披上一层可以让我们认识的人皮。
第一步:将字符串转为与基准时间的间隔数
gen clock=clock(date1,"YMDhms")
gen date=date(date2,"YMD")
date1的数据构成是年月日时分秒,所以选用clock()函数,得出的结果是指定时间与1960年1月1日 0时0分0秒的间隔秒数,因为是以秒计次,所以间隔数字非常大。
date2的数据构成是年月日,所以选用date()函数。得出的结果是指定时间与1960年1月1日的间隔天数。
第二步:将间隔数值转化为易读格式
format clock %tc
format date %td
此时时间值已经从date1、date2的字符串变成了可以进行加减运算的浮点数。可是用来筛选时间,计算时间差等。
常用转换函数包括:
函数 | 转化类型 | 常用format转化格式 |
---|---|---|
clock(var,“YMDhms”) | 年月日时分秒 | %tc |
weekly(var,“YW”) | 年周(eg.2021W23) | %tw |
date(var,“YMD”) | 年月日 | %td |
monthly(var,“YM”) | 年月 | %tm |
quartly(var,“YQ”) | 年季(eg.2021Q2) | %tq |
halfyearly(var,H") | 年半年(eg.2021h1) | %th |
year(var,“Y”) | 年 | %ty |
以上函数一般规律为:时间函数(待转换变量/“值,“该变量/值的格式”[,Y])。
注意⚠️格式参数(即表格中的“YMDhms”/“YW”/"YMD"等)需要根据变量/值的格式来自由调整,如20210813 10:24:43的格式为YMDhms,而10:24:43 08/13/2021的指定格式则为hmsDMY.
Y用于处理2位数年份,如21年8月3日,一般情况下可以忽略
在确定了变量/值格式参数后,目前的时间变量函数已经可是识别大部分常用时间写法,如date(var,“YMD”)函数可以识别的字符串日期格式包括但不限于20210813、2021.08.13、2021/08/13等。
时间变量提取单独的时间元素
date1、date2转为时间变量后,需要单独提取年、月等时间元素,可以用
year();month();week();day()
以上函数仅适用于date()转化出的时间变量,不适用于clock()转化的date1变量。
如果需要将clock格式转化为date格式,可以通过split()将date1字符串分为年月日与时分秒两个值后,再对年月日单独进行date()转化。