从时间创建日期变量(使用SAS 9.3)

时间:2015-01-27 14:29:05

标签: sas

使用SAS 9.3

我有两个变量(时间和脉冲)的文件,每个人一个文件。 我有他们开始为每个人测量的日期信息。 现在我想创建一个日期变量,在午夜(当然)更改日期,如何?

文本文件示例:

23:58:02    106
23:58:07    105
23:58:12    103
23:58:17    98
23:58:22    100
23:58:27    97
23:58:32    99
23:58:37    100
23:58:42    99
23:58:47    104
23:58:52    95
23:58:57    96
23:59:02    98
23:59:07    96
23:59:12    104
23:59:17    109
23:59:22    105
23:59:27    111
23:59:32    111
23:59:37    104
23:59:42    110
23:59:47    100
23:59:52    106
23:59:57    114
00:00:02    123
00:00:07    130
00:00:12    130
00:00:17    125
00:00:22    119
00:00:27    116
00:00:32    122
00:00:37    116
00:00:42    119
00:00:47    117
00:00:52    114
00:00:57    114
00:01:02    110
00:01:07    103
00:01:12    98
00:01:17    98
00:01:22    102
00:01:27    97
00:01:32    99
00:01:37    93
00:01:42    97
00:01:47    103
00:01:52    96
00:01:57    93
00:02:02    93
00:02:07    95
00:02:12    106
00:02:17    99
00:02:22    102
00:02:27    96
00:02:32    93
00:02:37    97
00:02:42    102
00:02:47    101
00:02:52    95
00:02:57    92
00:03:02    100
00:03:07    95
00:03:12    102
00:03:17    102
00:03:22    109
00:03:27    109
00:03:32    107
00:03:37    111
00:03:42    112
00:03:47    113
00:03:52    115 

3 个答案:

答案 0 :(得分:0)

正则表达式:

\d{2}:\d{2}:\d{2} \d*

请参阅此处以获取示例并使用正则表达式: https://regex101.com/r/xF1fQ5/1

编辑:并查看SAS正则表达式提示表:http://support.sas.com/rnd/base/datastep/perl_regexp/regexp-tip-sheet.pdf

答案 1 :(得分:0)

这样的事情:

Date lastDate = startDate;

List<NData> ListData = new ArrayList<NData>();
for(FileData fdat:ListFileData){
   Date nDate = this.getDate(lastDate,fdat.gettime());
   NData ndata= new NData(ndate,fdat.getMeasuring());
   LisData.add(nData);
   lastDate = nDate; 
 } 


. 
.
.
.
function Date getDate(Date ld,String time){

   Calendar cal = Calendar.getInstance();
   cal.setTime(ld);
   int year = cal.get(Calendar.YEAR);
   int month = cal.get(Calendar.MONTH)+1;
   int day = cal.get(Calendar.DAY_OF_MONTH);
   int hourOfDay   = this.getHour(time); 
   int minuteOfHour = this.getMinute(time);

   org.joda.time.LocalDateTime lastDate = new org.joda.time.LocalDateTime(ld)    
   org.joda.time.LocalDateTime newDate =  new org.joda.time.LocalDateTime(year,month,day,hourOfDay,minuteOfHour);

   if(newDate.isBefore(lastDate)){
     newDate = newDate.plusDays(1); 
   }
   return newDate.toDate();    

}

答案 2 :(得分:0)

如果没有示例代码,很难提供完整的答案,但SAS lag()功能可能足以满足您的需求。您的数据步骤将包括以下行,假设您的时间变量被称为time并且您的日期变量被称为date

retain date;
if time < lag(time) then date = date + 1;

这假设你从来没有任何24小时的差距(但看起来你无论如何都要假设)。

此答案还假设time字段已采用SAS时间格式。