合并日期变量与时间变量

在遇到日期yyyy-mm-dd与时间hh:mm:ss需要合并的时候

 

可以catx连接

 

data test;
  a="2004-01-31";
  b="12:55:00";
  c=catx('T',a,b);
  put a b c;
run;

 

 

可以将日期时间合并为标准字符"yyyy-mm-ddThh:mm:ss"后,利用以下日期时间格式进行转化为可运算的日期时间(变量b),也可以通过put转化为任意输出的字符格式,如datetime18.

 

data test1;
  a="2004-01-31T12:55:00";
  b=input(a,e8601dt.);
  c=put(b,datetime18.);
  put a b c;
run;

data test2;
  a="2004-01-31T12:55:00";
  b=input(a,is8601dt19.);
  c=put(b,datetime18.);
  put a b c;
run;

data test3;
  a="2004-01-31T12:55:00";
  a1=input(scan(a,1,"T"),yymmdd10.);
  a2=input(scan(a,2,"T"),hhmmss8.);
  b=dhms(a1,0,0,a2);
  c=put(b,datetime18.);
  put a b c;
run;

不规则的日期时间,由于均用函数进行转换,实际应用是也可直接用嵌套函数一步完成:
**********先获得日期时间型,后转为字符******;
data _null_;
a="2018-6-5";
b="8:11";
dt1=input(a,yymmdd10.);
time1=input(b,time8.);
datim3=dhms(dt1,0,0,time1);
datim4=put(datim3,is8601dt20.);
put time1  dt1 datim3 datim4;
run;

*******先获得日期时间字符型,后转为数值******;
data _null_;
a="2018-6-5";
b="8:11";
dt1=input(a,yymmdd10.);
dt2=put(dt1,yymmdd10.); *可以识别转换月份与日期小于10的格式;
time1=input(b,time8.);
time2=put(time1,tod8.); *小时小于会补0,凑足2位;
datim1=dt2||'T'||time2;
datim2=input(datim1,is8601dt20.);
put time1 time2 dt1 dt2 datim1 datim2 ;
run;

 

 

转载于

日期与时间合并的sas程序 - SAS专版 - 经管之家(原人大经济论坛) (pinggu.org)

posted @ 2023-02-16 15:10  Rachellaw  阅读(130)  评论(0)    收藏  举报