【问题标题】:get specfic day of week from the previous week via sas macro通过 sas 宏从前一周获取特定的星期几
【发布时间】:2011-12-10 04:11:53
【问题描述】:

有谁知道如何使用 sas 宏过程创建宏变量来获取特定的星期几?

每次运行 sas 宏时,我都想获取前一周的星期三日期。

例如:

今天:2011 年 10 月 18 日,星期二--> 如果我今天运行宏,我想得到: “2011 年 10 月 12 日,星期三”

如果我在星期一运行宏,我仍然想得到“2011 年 10 月 12 日星期三”

谢谢,

【问题讨论】:

    标签: date macros sas dayofweek sas-macro


    【解决方案1】:

    您可以使用intnx 完成此操作。这是一个例子(不是宏,但它给了你想法):

    首先,生成一些数据:

    data dates;
     do d=0 to 13;
      date = '15oct2011'd + d;
      output;
     end;
     format date date8.;
    run;
    

    这将为您提供最近的星期三。请注意,“week.4”是从星期三开始的几周的说明。

    data dates;
     set dates;
     wed=intnx('week.4',date,0,'beginning');
     format wed date8.;
    run;
    

    变量wed 现在包含最近的星期三的日期。

    【讨论】:

      【解决方案2】:

      如果你想调用一个宏来返回最近的星期三的日期。 (另外,如果您希望将日期存储在宏变量中...删除“&weekday;”语句。)

      %Macro Get_Weekday(date);
      
       %Let weekday=%sysfunc(putn(
                       %sysfunc(intnx(week.4,&date,0,beginning)),weekdate.));
       &weekday;
      
      %Mend Get_Weekday;
      
      %Put Today is %sysfunc(putn(%sysfunc(today()),weekdate.)) 
        and the most recent Wednesday is %Get_Weekday(%sysfunc(today()));
      %Put If Today was %sysfunc(putn(%eval(%sysfunc(today())-1),weekdate.)) 
        then the most recent Wednesday would be 
         %Get_Weekday(%eval(%sysfunc(today())-1));
      

      【讨论】:

        【解决方案3】:

        我将您的问题解释为“如何让 SAS 返回上周星期三的日期,而不管当前是星期几?”

        如果这是您想要的结果,则需要拨打两个 intnx 电话:一个电话返回上个星期的星期日 (lastwk=intnx('week', today, -1);),然后第二个电话移动到上周的星期三 (lastwed=intnx('week.4', lastwk , 1); )。

        一种更简单的方法可能是回到上周的开头并简单地将结果加 3,但该代码看起来更像是一个 hack,而不是有意的偏移量。

        代码

        data _null_;
            do i = -10 to 10;
                today="&SYSDATE9"d + i;
                lastwk=intnx('week', today, -1);
                lastwed=intnx('week.4', lastwk , 1);
                put today weekdate. '-->' lastwed weekdate.-l;
            end;
        run;
        

        日志

              Sunday, October 9, 2011-->Wednesday, October 5, 2011
             Monday, October 10, 2011-->Wednesday, October 5, 2011
            Tuesday, October 11, 2011-->Wednesday, October 5, 2011
          Wednesday, October 12, 2011-->Wednesday, October 5, 2011
           Thursday, October 13, 2011-->Wednesday, October 5, 2011
             Friday, October 14, 2011-->Wednesday, October 5, 2011
           Saturday, October 15, 2011-->Wednesday, October 5, 2011
             Sunday, October 16, 2011-->Wednesday, October 12, 2011
             Monday, October 17, 2011-->Wednesday, October 12, 2011
            Tuesday, October 18, 2011-->Wednesday, October 12, 2011
          Wednesday, October 19, 2011-->Wednesday, October 12, 2011
           Thursday, October 20, 2011-->Wednesday, October 12, 2011
             Friday, October 21, 2011-->Wednesday, October 12, 2011
           Saturday, October 22, 2011-->Wednesday, October 12, 2011
             Sunday, October 23, 2011-->Wednesday, October 19, 2011
             Monday, October 24, 2011-->Wednesday, October 19, 2011
            Tuesday, October 25, 2011-->Wednesday, October 19, 2011
          Wednesday, October 26, 2011-->Wednesday, October 19, 2011
           Thursday, October 27, 2011-->Wednesday, October 19, 2011
             Friday, October 28, 2011-->Wednesday, October 19, 2011
           Saturday, October 29, 2011-->Wednesday, October 19, 2011
        

        【讨论】:

        • 就像信息一样,如果星期三是所需的星期几,您总是可以使用以下命令找到上星期三:lastwed=intnx('week', today, -1, 'm');
        猜你喜欢
        • 2017-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-08
        • 1970-01-01
        • 2017-12-16
        相关资源
        最近更新 更多