SAS today()函数程序

SAS today() function program

所以这段代码来自我之前担任角色的人(不是我自己),我想了解它是否完全没用。对 SAS 还是相当陌生,但我对 Today() 函数的理解是它给出了自 1/1/1960 以来的天数。第一个语句和 if/elses 系列都取决于 if today() returns 一个小于 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;

您缺少一个功能!

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

day() returns 一个月中的第几天 - 从 1 到 31 的数字。

因此,如果您不在本月的第一周,这只会执行第一部分 - 例如,这在金融领域很常见。如果不是该月的第一周,则该期间的结束日期为 3 天前。如果是当月的第一个星期,那就做更复杂的逻辑。