您好我在SAS有日期转换问题, 我导入了一个excel文件,其中包含以下日期。
2012-01-09
2011-01-31
2010-06-28
2005-06-10
2012-09-19
2012-09-19
2007-06-12
2012-09-20
2004-11-01
2007-03-27
2008-06-23
2006-04-20
2012-09-20
2010-07-14
导入后的日期已经改变了
40917
40574
40357
38513
41171
41171
39245
41172
38292
39168
39622
38827
41172
40373
我已经使用输入函数来转换日期,但它给出了一个奇怪的结果。, 我用的代码。,
want_date=input(have_date, anydtdte12.);
informat want_date date9.; format have_date date9.;run;
我得到了极大的支持和世界约会。任何想法我怎么能转换这些?
答案 0 :(得分:2)
您可以鼓励SAS在导入过程中将数据转换为日期,但这不一定是灵丹妙药。
proc import file=whatever out=whatever dbms=excel replace;
dbdsopts=(dbSasType=( datevar=date ) );
run;
其中datevar
是您的日期列名称。这告诉SAS希望这是一个约会并尝试转换它。
有关详细信息,请参阅So Your Data Are in Excel,或the documentation。
答案 1 :(得分:1)
来自:http://www2.sas.com/proceedings/sugi29/068-29.pdf
从午夜开始,时间在SAS内部计算为秒 日期/时间组合计算为自之后的秒数 1960年1月1日午夜。
Excel还为日期和时间使用简单的数值 内部。对于日期值,与SAS日期的差异为 只有锚点。 Excel使用1900年1月1日作为第一天。
所以添加常量。
实施例
SAS_date = Excel_date - 21916;
SAS_time = Excel_time * 86400;
SAS_date_time = (Excel_date_time - 21916) * 86400;
答案 2 :(得分:0)
正如贾斯汀所写,你需要纠正不同的零日期(SAS与Excel)。
然后你只需要应用一种格式(如果你想得到一个日期变量来进行计算):
want_date = have_date-21916;
format want_date date9.;
或将其转换为字符串:
want_date = put(have_date-21916, date9.);
在任何一种情况下,您都可以选择您喜欢的日期格式。