挣扎着日期格式,想要YYYY-MM-DD

时间:2013-04-13 16:51:14

标签: date sas

作为SAS的绝对初学者,我很快就遇到了日期格式问题。

我有一个包含三种日期类型的交易的数据集:BUSDATE,SPOTDATE,MATURITY。每个交易都用两行表示,我希望第1行有BUSDATE和SPOTDATE,第2行有MATURITY。

在原始集中,日期为YYYY-MM-DD格式。

DATA masterdata;
SET sourcedata(rename(BUSDATE=BUSDATE2 SPOTDATE=SPOTDATE2 MATURITY=MATURITY2));

BUSDATE=BUSDATE2;
SPOTDATE=SPOTDATE2;

IF TRANS_TYPE='Swap' THEN;
MATURITY=SPOTDATE;

RUN;

问题是,这会返回类似17169的东西(我猜是从某个日期开始的天数)。

如何以YYYY-MM-DD格式输出 - 或者这种方法是错误的;我应该先将日期变量转换为某种SAS日期格式吗?

2 个答案:

答案 0 :(得分:10)

如果您有有效的SAS日期,只需在您的DATA STEP中添加FORMAT语句。

Format busdate spotdate maturity yymmdd10. ;

SAS日期是数字变量。它们代表自1960年1月1日以来的天数。您使用FORMAT显示日期。

答案 1 :(得分:4)

添加到CarolinaJay的答案中,您通常希望将它们保留为数字格式,因为您可以使用它们进行数学运算(例如“自日期X以来的天数”)。但是,如果由于某种原因你需要一个字符变量,你可以这样做:

date_As_char=put(datevar,YYMMDD10.);

顺便提一下,YYMMDD10实际上会按照你的要求给你YYYY-MM-DD;如果你想要一个不同的分隔符,请参阅http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000589916.htm(YYMMDDxw。格式) - 如果你在最后一个D之后放一个字母,对于某些字母,你得到一个不同的分隔符。喜欢,YYMMDDn10。不给你分隔符,或YYMMDDs10。给你斜线。 YYMMDDd10。给你破折号,就像省略字母一样。这个概念也适用于MMDDYY格式,我想其他一些格式。