【问题标题】:Proc sql calculate previous saturday or end of last weekProc sql计算上一个星期六或上周结束
【发布时间】:2018-10-25 15:22:15
【问题描述】:

有更好的方法吗?

asof = CAST(DATEADD(week, DATEDIFF(week,'19000101',CURRENT_TIMESTAMP),
       '1899-12-30T19:00:00') AS DATE)

基本上,我正在尝试使用前一周的星期六作为我在 Proc Sql 上的过滤器。无论我在哪一天运行此查询,它都应该给我上周六的日期(不是时间戳)

谢谢!

【问题讨论】:

  • 是用于 teradata 还是 SQL 服务器的 SQL 直通代码。
  • 是的,是SQL server的SQL pass through代码
  • 请表明您在过滤器中使用它。在您的示例中,它正在创建一个变量,您的过滤方式可能会影响逻辑。

标签: sql sql-server tsql sas proc-sql


【解决方案1】:
%let last_saturday = intnx ('week.7', today()-1, 0);
%let last_saturday = %sysfunc(intnx (week.7, %sysfunc(today())-1, 0), yymmdd10.);
%put NOTE: &last_saturday;

%let last_saturday_sq = %sysfunc(quote(&last_saturday,%str(%')));
%put NOTE: &last_saturday_sq;

proc sql;
  … connection to … 
     (cast &last_saturday_sq as DATE) as asof
  … 

【讨论】:

  • 不幸的是,这不起作用。我不知道为什么,因为它没有给我任何错误信息。
  • 在没有宏变量的情况下尝试相同的代码,而不是使用硬编码值,看看是否会发生相同的“不起作用”。如果是这样,那不是宏。如果一切正常,它就在宏/传递区域的某个地方。
猜你喜欢
  • 1970-01-01
  • 2018-09-25
  • 2021-07-05
  • 1970-01-01
  • 2021-10-11
  • 2016-06-16
  • 1970-01-01
  • 2012-01-28
  • 2021-12-10
相关资源
最近更新 更多