在SAS中格式化字符变量的日期

时间:2017-04-08 09:39:53

标签: date input formatting sas

我有一个字符变量,其值如下:

Aug 1, 2015

我希望在date9中拥有此日期值。和DDMMYYD10。格式。

这就是我的尝试:

month=upcase(substr(startdato,1,3));
day=0!!substr(startdato,5,1);
year=substr(startdato, 8,4);
startdato_a=trim(day)!!trim(month)!!trim(year);

FORMAT  Startdato2 date9.;
format startdato3 DDMMYYD10.;

Startdato2 = INPUT(startdato_a,date9.);
Startdato3 = INPUT(startdato_a,date9.);

我得到了这个输出:

month=AUG
day=01
year=2015
startdato_a=01AUG2015
startdato2=.
startdato3=.

为什么我没有在startdato2和startdato3中获取值?

2 个答案:

答案 0 :(得分:1)

由于startdato_a中的前导/尾随空格而导致缺少值,这会阻止信息正常工作。如果你改为input(strip(startdato_a),date9.),它会按预期工作。

然而,有一种更简单的方法:

data want;
textdate = 'Aug 1, 2015';
date = input(textdate,anydtdte11.);
format date date9.;
run;

答案 1 :(得分:0)

使用$QUOTE.函数输出您的角色变量是查看前导空白的便捷方式。这样做可以看到导致INPUT()函数出现问题的原因。

startdato="Aug 1, 2015"
month="AUG"
day="           01"
year="2015"
startdato_a="           01AUG2015"

原因是在生成该字符串时包含数字常量。

day=0!!substr(startdato,5,1);

SAS必须将0转换为字符串,因此它使用best12.格式,这就是DAY值中有11个前导空格的原因。您可以使用字符串文字。

day='0'!!substr(startdato,5,1);

哪会产生更好的结果。

startdato="Aug 1, 2015"
month="AUG"
day="01"
year="2015"
startdato_a="01AUG2015"
Startdato2=01AUG2015
startdato3=01-08-2015