【问题标题】:SAS - Custom Date Format - YYYYMMDDhhmmssSAS - 自定义日期格式 - YYYYMMDDhhmmss
【发布时间】:2017-11-10 05:45:00
【问题描述】:

我需要将当前日期添加到我从 SAS 导出的输出中,格式如下:filename_YYYYMMDDhhmmss.csv

我正在通过以下方式创建宏变量:

%let date_human = %sysfunc(today(), YYYYMMDDn8.);

有人知道如何为我得到的日期创建自定义格式吗?日期时间20。给出一个不正确的。

谢谢。

【问题讨论】:

  • 昨晚在 sas.communities.com 上提出并回答了这个问题。
  • 我找不到任何适合我的日期格式的内容,我知道发布了一些不同的内容。你有那个帖子的链接吗?

标签: date sas format informat


【解决方案1】:

使用 B8601 格式。

%let now=%sysfunc(datetime());
%let date_human=%sysfunc(putn(&now,B8601DN8))%sysfunc(timepart(&now),B8601TM6);

【讨论】:

    【解决方案2】:

    proc format 中使用picture

    proc format;
        *custom format for the datetime values;
       picture cust_dt other = '%0Y%0m%0d%0H%0M%0S' (datatype=datetime);
    run;
    
    ** put into macro **;
    data test;
        dt = datetime();
        call symputx("dt",strip(put(dt,cust_dt.)));
    run;
    
    %put &dt.;
    
    ** use macro for filename **;
    data file_&dt.; set sashelp.class;
    run;
    

    【讨论】:

      【解决方案3】:

      两种解决方案:

      1.使用proc format

      创建带有日期时间指令的图片格式

      在这里,我们正在创建一个名为date_human 的格式。您可以随意命名。

      proc format;
          picture date_human other='%0Y%0M%0D%0H%0M%0S' (datatype=datetime);
      run;
      
      %let date_human = %sysfunc(datetime(), date_human.);
      

      2。将各种宏变量混合在一起

      /* YYYYMMDD part */
      %let yymmdd   = %sysfunc(today(), yymmdd8.);
      
      %let datetime = %sysfunc(datetime());
      %let time     = %sysfunc(putn(%sysfunc(timepart(&datetime.)), time8.0));
      
      /* hhmmss part */
      %let hour     = %scan(&time., 1, :);
      %let min      = %scan(&time., 2, :);
      %let sec      = %scan(&time., 2, :);
      
      /* Put it all together */
      %let date_human = &yymmdd.&hour.&min.&sec.;
      

      【讨论】:

      • 感谢您的快速回复!你知道为什么我的约会中 HOUR 只得到一位数字吗? 2017060895757.csv
      • %let time=%sysfunc(TIME(),time8.0) 可能会比你做的两步更容易,不是吗(如果你只是想获得现在的时间)?
      • @MaiiaS。您要采用哪种解决方案?
      • @Joe,我尝试使用 %let time=%sysfunc(TIME(),time8.0),但后来我在日期的第二部分得到“:”,我需要只保留数字
      • @MaiiaS。之后你仍然需要扫描位。我只是替换了两个%let datetime ; %let time ; 部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 2013-01-11
      • 2020-06-05
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多