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

用户名

我有大约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

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

SQL将字符转换为日期时间

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

    SQL将字符转换为日期时间

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档