【问题标题】:%PUT - print dates and times in format from numeric macro variable%PUT - 以数字宏变量的格式打印日期和时间
【发布时间】:2019-02-27 21:12:02
【问题描述】:

我遇到了这个看起来很简单的问题。

我有这样的宏:

%macro test;

    /* I start from it */
    %let time_ = %sysfunc(time());
    %let date_ = %sysfunc(date());

    %let time1 = %sysfunc(time());
        data _null_;
            timedelay = sleep(5, 1);
        run;
    %let time2 = %sysfunc(time());

    %let diff = %sysevalf(&time2 - &time1);

    %put Timenow: &time_;
    %put DateNOw: &date_;
    %put TimeDifference: &diff;
    /*Above works as I want*/

    /* What I want to have */
    %put Timenow: %sysfunc(put(&time_, time13.)); /* Timenow: 22:06:00 */
    %put DateNOw: %sysfunc(put(&time_, date9.)); /* DateNOw: 27FEB2019 */
    %put TimeDifference: %sysfunc(put(&time_, time13.)); /* TimeDifference: 00:00:05 */


%mend;

%test;

所以基本上例如相反%sysfunc(put(&time_, time13.)); 类似的东西会给我结果:22:06:00 有没有简单直接的方法来做到这一点?

谢谢!

【问题讨论】:

  • 您必须将 PUTC/PUTN 函数与 SYSFUNC 一起使用。

标签: date sas format


【解决方案1】:

SYSFUNC 有一个格式选项。考虑一下这对您是否有用。

%let time1 = %sysfunc(datetime());
   data _null_;
      timedelay = sleep(5, 1);
      run;
%let time2 = %sysfunc(datetime());

%let diff = %sysfunc(sum(&time2,-&time1),time13.);
%put NOTE: &=diff;

或者如果你想使用 PUTN 功能。

%put TimeDifference: %sysfunc(putN(%sysevalf(&time2-&time1),time,13));

【讨论】:

  • 从差异中推导出它对我来说很重要——它也用于不同的地方。我在 %sysfunc 中更新了该选项。抱歉,我没有进一步澄清。
  • @MateuszKonopelski 听起来你只需要将 PUT 替换为 PUTN 函数。
  • 这正是我所需要的。请更改您的原始帖子,我会将其标记为答案。谢谢!
  • 请注意,putn() 的参数中无需使用 %sysevalf()%sysfunc() 调用会将方程推入正常的 SAS 处理中,以作为评估 putn() 函数调用的一部分进行评估。
猜你喜欢
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 2013-06-15
  • 2014-11-29
  • 2019-10-30
相关资源
最近更新 更多