首页 > 解决方案 > %PUT - 以数字宏变量的格式打印日期和时间

问题描述

我遇到了这个看起来很容易的问题。

我有像这样的宏:

%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 是否有一种简单直接的方法来做到这一点?

谢谢!

标签: datesasformat

解决方案


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));

在此处输入图像描述


推荐阅读