美文网首页SAS编程
处理日期的一些函数(日期专题三)

处理日期的一些函数(日期专题三)

作者: SASPRO的打工人生活 | 来源:发表于2021-08-08 20:18 被阅读0次

    有时候你们没在简书看到我的文章,有可能是被锁定了,上一篇就是被锁定了,莫名其妙的,不知道是不是涉及到政Z。

    今天继续讲几个关于时间处理的函数,写SDTM或者ADaM一般用的比较少,但是在写DVP的时候可能用的上并且有时候能达到事半功倍的效果。

    一:tod函数

    一般转换时间的时候,用的最多的一般是time8等.

    data test;

        input tim $;

    cards;

    7:42

    20:47

    19:20:22

    9:30

    ;

    run;

    data test2;

    set test;

    tim2=input(tim,time8.);

    format tim2 time8.;

    run;

    data test3;

    set test2;

    tim3=put(tim2,tod8.);

    tim4=put(tim2,time8.);

    run;

    但是time函数,如果时间是10以前的,并不会在个位数前补上0,但是tod函数会帮你补上0,但是要注意的是tod函数只能将数值型转换成字符型,但是time函数能够相互转换。

    二:is8601dt19./e8601dt19. 效果看图片

    data test; 

       a="2011-01-15T12:55:00"; 

       b=input(a,is8601dt19.);  

       c=put(b,is8601dt19.);    

       d=put(b,datetime20.); 

    e=put(b,e8601dt19.); 

    run; 

    is8601dt19.这个格式既能将字符型变量转化为数值型变量,又能将数值型变量转化为字符型变量。而datetime20.只能将数值型变量转化为字符型变量,转化后的形式也略有差异,为15JAN2011:12:55:00形式,没有中间的那个“T”。

    三:yymmdd10./e8601da.效果看图片

    data test; 

    a="2021-01-15";

       b=input(a,yymmdd10.);  

       c=input(a,e8601da.); 

    e="2021-1-15";

       f=input(e,yymmdd10.);  

       g=input(e,e8601da.);

    run; 

    e8601da.则和常用的yymmdd10.类似,不过不识别"2021-8-5”这种形式,而必须是"2021-08-05",就是日期要完整。所以可以看到变量g是空的。

    所以为了解决第三个的问题,有以下函数可以用:

    四:anydtdtm.函数,能处理一些不规范的时间格式,比如上面的日期函数有些就不适用下面的日期。这个功能挺强大的。(代码放简书)

    data b;

    a1="2011-01-15T12:55:00";  **可以识别;                                                                                           

    b1=input(a1,anydtdtm.);

    a2="2011-01-16";          **可以识别;                                                                                                     

    b2=input(a2,anydtdtm.);

    a3="2021-01" ;          /*只有年月可以读取出来,很多这种不完整的日期,转换成数值型后可以方便比较*/

    b3=input(a3,anydtdtm.);

    a4="2011-01-15T12:55";  /*时间格式不完整读取不出,即使有 时分*/

    b4=input(a4,anydtdtm.);

    a5="2021";              /*只有年份读取不出*/

    b5=input(a5,anydtdtm.);

    a6="2011/01/16";                                                                                                               

    b6=input(a6,anydtdtm.);  **斜杠亦可以识别;

    a7="2011-01-15 12:55:00";    **时间日期没有 T 也可以识别;                                                                                           

    b7=input(a7,anydtdtm.);

    run;       


    5:anydtdte.函数,自动填补最早的日期。

    data test;

    a="2021-08";

    b=input(a,anydtdte.);

    format b yymmdd10.;

    run;

    但是只有年份不可以。

    如果想填补最后一天呢?可以利用INTNX函数,来自一位网友的分享:

    data test; 

    format b c yymmdd10.; 

    a="2021-08"; 

      b=input(a,anydtdte.);                  

      c=intnx('month',b,0,'e');                 

    run;

    相关文章

      网友评论

        本文标题:处理日期的一些函数(日期专题三)

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