如何将字符变量转换为数字日期变量

时间:2016-12-15 15:01:35

标签: sas

我有以下变量

mhstdtc
-----------    
2011-01-01
2015-02-01
2002
2001
2003-03
2003-12

这是我用来转换变量

的代码
ASTDTMC=INPUT(MHSTDTC,is8601da.);
PUT ASTDTMC DATE9.;

它只对变量有yyyy-mm-dd值,剩下的都是空白。请帮我转换yyyy和yyyy-mm值;

提前致谢。

2 个答案:

答案 0 :(得分:0)

左侧使用SUBSTR的一种方式。

25         data _null_;
26            input iso :$10.;
27            mask = '....-06-15';
28            substr(mask,1,length(iso))=iso;
29            ASTDTM=INPUT(mask,is8601da.);
30            format astdtm date9.;
31            put 'NOTE: ' (_all_)(=);
32            cards;

NOTE: iso=2011-01-01 mask=2011-01-01 ASTDTM=01JAN2011
NOTE: iso=2015-02-01 mask=2015-02-01 ASTDTM=01FEB2015
NOTE: iso=2002 mask=2002-06-15 ASTDTM=15JUN2002
NOTE: iso=2001 mask=2001-06-15 ASTDTM=15JUN2001
NOTE: iso=2003-03 mask=2003-03-15 ASTDTM=15MAR2003
NOTE: iso=2003-12 mask=2003-12-15 ASTDTM=15DEC2003

答案 1 :(得分:0)

如果您的原始日期为字符格式,请在每个日期添加“01-01”,然后进行转换。如果您的日期不是字符格式,请将它们转换为字符,然后将“01-01”添加到它们,并尝试以下代码:

data have ;
 input mhstdtc $10.;
cards;
2011-01-01
2015-02-01
2002
2001
2003-03
2003-12
;

data want;
set have;
ASTDTMC2=compress(catx("",MHSTDTC,"-01-01")," ","");
ASTDTMC3=inPUT(ASTDTMC2,yymmdd10.);
run;

结果在ASTDTMC3中。

18628
20120
15341
14976
15765
16040