将未知日期/日期时间格式的字符变量转换为数字日期

用户名

我有大约30个数据集,每个数据集都有大约20个日期字段,其中变量类型在字符和数字之间以及日期和日期时间格式之间变化,即以下情况...

a。)数字-日期b。)数字-日期时间c。)字符-日期d。)字符-日期时间

我想将每个单独的字段转换为数字和date9。格式。我试图在下面编写宏,当该变量是字符串时,该宏将无法产生正确的结果。怎么了?如果未正确指定字符变量dateformat,... sas似乎无法正确解释输入语句。

%macro converttodate(inlib,indata,outlib,outdata,invar,outvar);

ods listing close;
ods output dataset.variables = work.formats;
proc contents data = &inlib..&indata.;
run;
data work.formats;
    set work.formats;
    where lowcase(compress(variable)) = lowcase(compress("&invar."));
run;
data _NULL_;    
    set work.formats;
    call symput('dtype',compress(lowcase(type)));
    call symput('dformat',compress(lowcase(format)));
    call symput('dlen',compress(put(len,8.)));
run;
%PUT INVAR  = ** &invar. ** OUTVAR = ** &outvar. **;
%PUT TYPE   = ** &dtype. **;
%PUT FORMAT = ** &dformat. **;
%PUT LENGTH = ** &dlen. **;

%if &dtype. = num %then %do;

    data &outlib..&outdata.;
        length tmp_put $50; 
        set &inlib..&indata.;
        format &outvar. date9.;
        tmp_put = compress(put(&invar.,&dformat.));
        if index(tmp_put,':') > 0 then &outvar. = datepart(&invar.); 
        else &outvar. = &invar.;
        drop tmp_put;
    run;

%end;
%else %do;

    data &outlib..&outdata.;
        set &inlib..&indata.;
        format &outvar. date9.;
        if index(&invar.,':') > 0 then &outvar. = datepart(input(&invar.,datetime.)); 
        else &outvar. = input(&invar.,date.);
    run;

%end;

%mend;

例如

data work.test;
    format x1 date9. y1 datetime30.6;
    x1 = mdy(10,16,1922);
    x2 = put(x1,date9.);
    y1 = 100000;
    y2 = put(y1,datetime30.6);
run;


%converttodate(
    inlib   = work,
    indata  = test,
    outlib  = work,
    outdata = test,
    invar   = x2,
    outvar  = x2_out);
里扎

宏中的这一行引起了意外的行为:

else &outvar. = input(&invar.,date.);

日期的默认长度。是7,因此它将日期读取为16OCT19,即2019年

http://support.sas.com/documentation/cdl/zh-CN/etsug/60372/HTML/default/viewer.htm#etsug_intervals_sect008.htm

如果将其更改为date9,它将可以正常工作。如果要更改整个宏,可以查看inputn函数,该函数的第二个参数可以由输入数据的长度动态确定。

data &outlib..&outdata.;
    set &inlib..&indata.;
    format &outvar. date9.;

    in_format=catt("date", &dlen.);

    if index(&invar.,':') > 0 then &outvar. = datepart(input(&invar.,datetime.)); 

    else &outvar. = inputn(&invar.,in_format);

run;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将.NET日期/时间格式字符串转换为Javascript日期/时间格式字符串

来自分类Dev

将日期字符串转换为JSON日期格式

来自分类Dev

(Oracle)将日期字符串转换为日期时间

来自分类Dev

将SAS数字日期转换为日期时间格式

来自分类Dev

将日期列表从字符转换为日期格式

来自分类Dev

将Carbon日期转换为html日期时间格式

来自分类Dev

将字符日期格式转换为R日期

来自分类Dev

将日期从字符转换为可以在R中的时间序列分析中使用的日期格式

来自分类Dev

将频率(与时间相关)转换为日期(到期日)

来自分类Dev

如何将内部数字日期转换为访问日期/时间格式?

来自分类Dev

Python:将MySQL日期时间转换为格式的日期时间

来自分类Dev

使用Javascript将字符串(日期格式)转换为日期时间

来自分类Dev

将.NET日期/时间格式字符串转换为Javascript日期/时间格式字符串

来自分类Dev

将GMT格式的字符串转换为日期时间

来自分类Dev

SQL将字符转换为日期时间

来自分类Dev

将日期字符串转换为JSON日期格式

来自分类Dev

Python将日期时间字符串转换为日期

来自分类Dev

将日期时间字符串转换为日期

来自分类Dev

将日期列表从字符转换为日期格式

来自分类Dev

将JSON日期转换为C#日期时间变量

来自分类Dev

将日期字符串转换为UTC日期时间

来自分类Dev

将字符串日期转换为数字日期

来自分类Dev

将日期字符串转换为日期时间

来自分类Dev

将日期和字符“时间”字段转换为单个日期

来自分类Dev

将日期和时间字符串转换为特定格式的日期

来自分类Dev

将字符串中的日期时间格式转换为日期javascript?

来自分类Dev

将整数字段日期时间转换为日期时间

来自分类Dev

Xslt 1.0 将日期转换为日期时间格式

来自分类Dev

将字符串转换为不同的日期时间格式

Related 相关文章

  1. 1

    将.NET日期/时间格式字符串转换为Javascript日期/时间格式字符串

  2. 2

    将日期字符串转换为JSON日期格式

  3. 3

    (Oracle)将日期字符串转换为日期时间

  4. 4

    将SAS数字日期转换为日期时间格式

  5. 5

    将日期列表从字符转换为日期格式

  6. 6

    将Carbon日期转换为html日期时间格式

  7. 7

    将字符日期格式转换为R日期

  8. 8

    将日期从字符转换为可以在R中的时间序列分析中使用的日期格式

  9. 9

    将频率(与时间相关)转换为日期(到期日)

  10. 10

    如何将内部数字日期转换为访问日期/时间格式?

  11. 11

    Python:将MySQL日期时间转换为格式的日期时间

  12. 12

    使用Javascript将字符串(日期格式)转换为日期时间

  13. 13

    将.NET日期/时间格式字符串转换为Javascript日期/时间格式字符串

  14. 14

    将GMT格式的字符串转换为日期时间

  15. 15

    SQL将字符转换为日期时间

  16. 16

    将日期字符串转换为JSON日期格式

  17. 17

    Python将日期时间字符串转换为日期

  18. 18

    将日期时间字符串转换为日期

  19. 19

    将日期列表从字符转换为日期格式

  20. 20

    将JSON日期转换为C#日期时间变量

  21. 21

    将日期字符串转换为UTC日期时间

  22. 22

    将字符串日期转换为数字日期

  23. 23

    将日期字符串转换为日期时间

  24. 24

    将日期和字符“时间”字段转换为单个日期

  25. 25

    将日期和时间字符串转换为特定格式的日期

  26. 26

    将字符串中的日期时间格式转换为日期javascript?

  27. 27

    将整数字段日期时间转换为日期时间

  28. 28

    Xslt 1.0 将日期转换为日期时间格式

  29. 29

    将字符串转换为不同的日期时间格式

热门标签

归档