【问题标题】:Creating a date exactly one month in the past in SAS在 SAS 中创建恰好在过去一个月的日期
【发布时间】:2015-08-03 20:02:43
【问题描述】:

我正在尝试在 SAS 9.3 中创建两个日期时间变量。第一个,“endDate”是程序运行时的当前日期时间。第二个,“startDate”正好是过去一个月。

我的代码是:

  %let endDate = %sysfunc(DATETIME() datetime.);
  %let startDate = %sysfunc(intnx('month', DATETIME(), -1) datetime.);

根据我能找到的任何文档,我无法弄清楚它有什么问题,但我收到以下错误消息:

“错误:未找到宏函数调用后的预期右括号。”

我做错了什么?

一些额外的背景:我想在 proc sql 语句中使用这两个宏变量,这样我就可以在运行时将表过滤为过去一个月内的数据。

谢谢!

【问题讨论】:

    标签: date dynamic sas


    【解决方案1】:

    你有几个问题:

    1. %sysfunc() 有两个参数,第二个是可选的,但它确实需要用逗号分隔。
    2. 您在 intnx 函数中使用 DateTime() 函数还需要 %sysfunc()
    3. 您有日期时间变量,因此您需要使用 DTMONTH 作为间隔而不是月份。
    4. 宏调用中的文字不需要引号

       %let endDate = %sysfunc(DATETIME(), datetime.);
       %put &endDate;
      
       %let startDate = %sysfunc(intnx(dtmonth, %sysfunc(datetime()), -1), datetime.);
       %put &StartDate;
      

    【讨论】:

      【解决方案2】:

      四件事:

      • 通过%sysfunc 调用函数时,不需要在字符串参数周围加上单引号
      • 您需要为要在宏环境中调用的每个单独的数据步进函数使用%sysfunc,这意味着您需要在这种情况下嵌套它们,因为您要在另一个函数中调用一个函数。这可能会变得一团糟。
      • 您需要将 datetime 增加一个 datetime-month 增量,而不是一个月增量,因此请使用 dtmonth 而不是 month
      • 在函数调用和%sysfunc 中的格式之间需要一个逗号

      把它们放在一起:

       %let endDate = %sysfunc(DATETIME(), datetime.);
       %let startDate = %sysfunc(intnx(dtmonth, %sysfunc(DATETIME()), -1), datetime.);
      

      【讨论】:

        【解决方案3】:
        %let endDate = %sysfunc(DATETIME(), datetime21.);
        %let startDate =%sysfunc(putn(%sysfunc(intnx(dtmonth, %sysfunc(DATETIME()), -1,same)),datetime21.));
        %put  &enddate &startdate;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-15
          • 1970-01-01
          • 1970-01-01
          • 2016-12-10
          • 2019-07-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多