代码之家  ›  专栏  ›  技术社区  ›  intransigent_rocker

从宏变量获取星期几

sas
  •  0
  • intransigent_rocker  · 技术社区  · 3 年前

    我有一个格式化为日期的宏变量,并试图使用工作日函数来获取与我的宏变量值相对应的一周中的哪一天。

    我收到一个错误,称“%sysfunc宏函数引用的函数工作日的参数1不是数字”。

    在下面发布了我的代码。我做错了什么?TIA。

    /*Assign program run date*/
    %Let RefDate = %unquote(%str(%')%sysfunc(intnx(day,%sysfunc(today()),-0),mmddyy8.)%str(%'));
    
    %let run_day2 = %sysfunc(inputn(%sysfunc(compress(&refdate., "'")), mmddyy8.), date9.);
    %put &run_day2.;
    
    *Assign today;
    %let current_day = %sysfunc(weekday(&run_day2));
    %put Current day of week: &current_day;
    
    1 回复  |  直到 3 年前
        1
  •  3
  •   Reeza    3 年前

    这里有一个更简单的版本:

    %let current_day = %sysfunc(today(), weekday.);
    
        2
  •  1
  •   Quentin    3 年前

    Reeza的答案是正确的,但只是为了解释代码中的问题:

    %Let RefDate = %unquote(%str(%')%sysfunc(intnx(day,%sysfunc(today()),-0),mmddyy8.)%str(%'));
    
    %let run_day2 = %sysfunc(inputn(%sysfunc(compress(&refdate., "'")), mmddyy8.), date9.);
    %put &run_day2.;
    

    显示&rund_dy2解析为:06JUN2023。06JUN2023不是一个数字,这导致了您的错误。但“06JUN2023”d是一个数字,因为它是SAS的日期文字。因此,您可以将代码的第二部分更改为:

    *Assign today;
    %let current_day = %sysfunc(weekday("&run_day2"d));  *Added quote marks and d suffix;
    %put Current day of week: &current_day;
    

    并且代码会起作用。当然,Reeza的答案是一种更容易、更清晰的方式来获得你想要的东西。

    推荐文章