SAS知情日期时间(sas informat datetime)

2019-07-05 10:42发布

任何人都可以建议在适当的SAS了信息在日期时间(日/月/年为hh:mm)读取???

例如

data _null_;
informat from_dt datetime????.;
input from_dt ;
put from_dt=;
cards;
01/01/1960 00:00
;run;

Answer 1:

我不认为具体的资料,请为内置,但它是比较容易推出自己的。 下面是一个创建自定义的日期时间了信息(这需要cntlin数据集)和自定义格式(使用图片语句)在特定日期时间读取的例子,然后格式化回拿出来看看一样的输入。 我简化它假设在部分时间总是午夜(00:00),但它可以,如果你需要跟踪的时间部分,以及(就在86400号更改为3600让每一个小时很容易地扩展,和60为每分钟)。 它有助于看看你打开work.infmt数据集,看看是什么样子到底是怎么回事。

/* Create a custom datetime format as Month/Day/Year<space>Hours:Minutes*/
proc format;
  picture mydt other='%0m/%0d/%0Y %0H:%0M' (datatype=datetime);
run;

/* Create a custom informat using the format above */
data infmt ;
retain fmtname "dtwithspace" type "I" ;
   do label = "1jan1960:00:00"dt to
              "2jan2059:00:00"dt by 86400 ; 
      start = trim(left(put(label,mydt.)));
      output ;
   end ;
run ;
proc format cntlin = infmt ;
run ;


/* Now apply the informat and format to the data */
data _null_;
input from_dt $ 1-20;
format from_dt2 mydt.;
from_dt2=input(from_dt, dtwithspace.);
put from_dt2=;
cards;
01/01/1960 00:00
01/02/1999 00:00
;
run;

这给了像这样的输出:

278  data _null_;
279  input from_dt $ 1-20;
280  format from_dt2 mydt.;
281  from_dt2=input(from_dt, dtwithspace.);
282  put from_dt2=;
283  cards;

from_dt2=01/01/1960 00:00
from_dt2=01/02/1999 00:00


Answer 2:

该anydt *系列informats的做工作,平时。

data _null_;
  from_dt = input("01/01/1960 00:00", anydtdtm.);
  put from_dt= :datetime20.;
run;
/* on log
from_dt=01JAN1960:00:00:00
*/


Answer 3:

SAS可能不支持特定日期时间格式的数据是你既可以尝试将输入数据转换为frendlier格式,或者你可以使用解析日期时间。 SUBSTR , DHMS和MDY功能:

data test;
    format dtstr $16. dt datetime22.4;
    dtstr='01/01/1960 00:00';
    day=substr(dtstr,1,2);
    month=substr(dtstr,4,2);
    year=substr(dtstr,7,4);
    hour=substr(dtstr,11,2);
    minute=substr(dtstr,15,2);
    dt=DHMS(MDY(1*month,1*day,1*year),1*hour,1*minute,0);
    output;
run;

或者你也可以在时间字符串转换成datetimew.d格式和输入格式的字符串:

data test;
    format dtstr $16. dstr $8. tstr $5. indtstr $14. dt datetime22.4;
    dtstr='01/01/1960 00:00';
    dstr=put(input(substr(dtstr,1,10),mmddyy10.),date8.);
    tstr=substr(dtstr,12);
    indtstr=dstr!!':'!!tstr;
    dt=input(indtstr,datetime14.0);
    output;
run;

转换可以压缩到一个单一的,而是复杂的语句,因此创建一个宏,这可能是一个很好的决定。



Answer 4:

此项目从SAS知识库包括解析和格式化日期时间的代码。 看起来像SAS有一个伟大的在线帮助系统。

在第三个消息对谷歌集团本次交流会是有帮助。 它谈论输入日期时间,并提供代码。

你的问题是如此难以破译的,我所知甚少SAS,这就是所有我可以提供。 希望能帮助到你。



Answer 5:

通过列表会在这里 ,我不认为有一个。

可以想象,你可以创建自己的用proc format ,但我认为这将是非常困难的。 威乐科斯基宁的建议可能是你最好的选择。



文章来源: sas informat datetime