【问题标题】:Automating the starting date with a macro variable in SAS使用 SAS 中的宏变量自动执行开始日期
【发布时间】:2013-08-16 14:22:25
【问题描述】:

背景: 我有一个代码可以从当前日历季度开始时提取交易数据,但从一年前开始。 例如,如果我今天(2013 年 8 月 16 日)运行代码,它将必须提取 2012 年 7 月 1 日以后的所有数据。

问题: 我想使用宏变量自动提取数据的开始日期。

到目前为止,我被困在这里:

%let ThisYear = %Sysfunc(Date(), YEAR.);
%let LastYear= %eval(&ThisYear-1); /* I get the starting year */

%let QTR_start_month= %eval(3*%Sysfunc(Date(), qtr.)-2); /* this gives me the current quarter starting month. If I run it in August, it outputs 7 for July */

%let start_date=%str(01/%Sysfunc(month(&QTR_start_month))/&lcy);

最终的宏变量输出我想要的日期,但格式无法被 SAS 识别。

我将非常感谢任何帮助。 非常感谢!

【问题讨论】:

    标签: sas sas-macro


    【解决方案1】:

    您可以将该日期输入为日期格式,或将其构造为 SAS 日期文字 ('01JUL2013')、DDMONYY(YY),或直接将其构造为日期值。

    INTNX 可能是您构建它的最佳选择;你不需要所有的工作。

    %let start_date = %sysfunc(intnx(Quarter,%sysfunc(date()),-4),DATE9.);
    %put &start_date;
    

    您可以离开 DATE9。将其用作日期文字,或删除,DATE9. 以获取可直接使用的数值。您可以将其用作 "&start_Date."d 来使用日期文字。

    【讨论】:

      【解决方案2】:

      这应该可以完成工作。

      data test;
      format todays_date starting_qtr date9.; 
      todays_date=today();
      /*this takes today's date and rolls back 4 qtrs and sets that date to the first day of that quarter*/
      starting_qtr = intnx('qtr',todays_date,-4,'b');
      /*so, running this code today, 16AUG2013 would yield starting_qtr=01JUL2012 */
      
      call symputx('start_date', put(starting_qtr, date9.));
      
      run;
      
      %put &start_date.;
      

      【讨论】:

      • 好答案 - 我喜欢把它放在 SYSFUNC 但你在这里很好地展示了一些选项。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多