作为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;
Run Code Online (Sandbox Code Playgroud)
问题是,这会返回类似17169的东西(我猜是从某个日期开始的天数).
如何以YYYY-MM-DD格式输出 - 或者这种方法是错误的; 我应该首先将日期变量转换为某种SAS日期格式吗?
Jay*_*ett 10
如果您有有效的SAS日期,只需在您的DATA STEP中添加FORMAT语句即可.
Format busdate spotdate maturity yymmdd10. ;
Run Code Online (Sandbox Code Playgroud)
SAS日期是数字变量.它们代表自1960年1月1日以来的天数.您使用FORMAT显示日期.
添加到 CarolinaJay 的答案中,您通常希望将它们保留为数字格式,因为您可以使用它们进行数学运算(例如“自日期 X 以来的天数”)。但是,如果由于某种原因您需要一个字符变量,您可以这样做:
date_As_char=put(datevar,YYMMDD10.);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,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 格式,我认为还有其他一些格式。