我有一个字符变量,其值如下:
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中获取值?
答案 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