4

作为 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 日期格式吗?

4

2 回答 2

11

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

Format busdate spotdate maturity yymmdd10. ;

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

于 2013-04-13T17:29:17.703 回答
6

添加到 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 格式,我认为还有其他一些。

于 2013-04-14T04:42:21.460 回答