【问题标题】:Struggling with dates formats, want YYYY-MM-DD苦于日期格式,想要 YYYY-MM-DD
【发布时间】:2013-04-13 16:51:14
【问题描述】:

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

【问题讨论】:

    标签: date sas


    【解决方案1】:

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

    Format busdate spotdate maturity yymmdd10. ;
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-01-02
        • 1970-01-01
        • 1970-01-01
        • 2020-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多