从文本转换SAS日期。

时间:2014-07-15 15:57:10

标签: date sas

您好我在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;

我得到了极大的支持和世界约会。任何想法我怎么能转换这些?

3 个答案:

答案 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.);

在任何一种情况下,您都可以选择您喜欢的日期格式。