首页 > 解决方案 > SAS today() 函数程序

问题描述

所以这段代码来自我以前的角色(不是我自己),我试图了解它是否完全没用。对 SAS 来说还是相当新的,但我对 Today() 函数的理解是它给出了自 1960 年 1 月 1 日以来的天数。第一个语句和一系列 if/else 都取决于 today() 是否返回小于 8 的数字,这当然不应该发生。我错过了什么还是这段代码什么也没做?(我肯定已经更改了代码并且之前忘记删除它,所以他们可能不会发疯,但我只是在这里感到困惑)。

数据日期;

rundate=mdy(1,1,year(today()));

if day(today()) >= 8 then do;
    enddate=today()-3;
end;
else do;
    if month(today()) ~= 1 then do;
        if (month(today())-1) in (1,3,5,7,8,10,12) then do;
            enddate=mdy(month(today())-1,31,year(today()));
        end;
        else if (month(today())-1) in (4,6,9,11) then do;
            enddate=mdy(month(today())-1,30,year(today()));
        end;
        else do;
            if year(today()) not in (2020,2024,2028,2032) then enddate=mdy(2,28,year(today()));
            else enddate=mdy(2,29,year(today()));
        end;
    end;

    else do;
        enddate=mdy(12,31,year(today())-1);
    end;
end;

标签: datesas

解决方案


你缺少一个功能!

if day(today()) >= 8 then do;

day()返回月份中的某一天 - 一个从 1 到 31 的数字。

因此,如果您不在本月的第一周,这仅适用于第一部分 - 例如金融中的常见事情。如果不是该月的第一周,则该期间的结束日期为 3 天前。如果是该月的第一周,则执行更复杂的逻辑。


推荐阅读