where子句中的SAS Proc SQL函数仅适用于当前周



我有一些周日期-时间格式的数据,即2020年12月14日00:00:00:0000。我正在使用SAS和proc-sql查询

这些数据包含了许多周的数据,但我很好奇是否有办法只提取与本周相关的数据?IE今天是2020年12月17日,所以我只想提取2020年12日14日这一周的数据。如果今天是2020年12月22日,那么我希望它能提取2020年10月21日这一周的数据。

这是我尝试过的众多查询之一。

data have;
today = today();    
wkday = weekday(today); 
start = today - (wkday - 1);  
end = today + (7 - wkday); 
length cstart cend $30;
cstart = put(start, date9.) || ' 00:00:00.0000' ;
cend = put(end, date9.) || ' 00:00:00.0000' ;
call symput('start', cstart);
call symput('end', cend);
run; 

Proc Sql;
connect to odbc (environment=x user=y p=z);
create table basic.curweek as select * from connection to odbc
(select year, month, week, store, sales, SKU
from datatable
where (&start. <= week <= &end.)
order by sku);
disconnect from odbc;
quit;

多亏了下面伟大的人们的帮助,我来到了这个州。但是我仍然面临一些语法错误。如有任何帮助,我们将不胜感激!!

使用intnx()将感兴趣的日期时间和今天的日期时间与周初对齐。

proc sql;
create table want as
select *
from table
where intnx('dtweek', date, 0, 'B') = intnx('dtweek', datetime(), 0, 'B')
;
quit;

正如其他人所指出的,如果您使用SQL传递,则需要使用您的"风味";SQL。SAS特定功能将不起作用;今天(("在您使用的SQL中没有任何意义。

我会采取的方法是:

  1. 在SAS数据步骤中-获取今天的日期
  2. 使用今天的日期计算一周的开始和结束
  3. 将开始/结束日期转换为字符串(字符串将取决于日期在sql数据库中的格式-日期或日期时间(
  4. 使用字符串创建宏变量
  5. 将宏变量输入到sql直通查询中,以获得所需的子集日期

下面是一些示例代码。它可能不会让你一路走到那里,但会给你更多的想法来尝试。

data have;
today = today();    *** TODAYs DATE ***;
wkday = weekday(today); *** WEEK DAY NUMBER FOR TODAY, POSSIBLE VALUES ARE 1-7 ***;
start = today - (wkday - 1);    *** CALCULATE SUNDAY ***;
end = today + (7 - wkday);  *** CALCULATE SATURDAY ***;
*** UNCOMMENT AND USE BELOW IF WEEK START/END IS MON-FRI ***;
*start = today - (wkday - 2);   *** CALCULATE MONDAY ***;
*end = today + (6 - wkday); *** CALCULATE FRIDAY ***;
*** REPRESENT DATES AS DATE-TIME CHARACTER STRING - SURROUNDED BY SINGLE QUOTES ***;
cstart = "'" || put(start, date9.) || ' 00:00:00.0000' || "'";
cend =  "'" || put(end, date9.) || ' 00:00:00.0000' || "'";
*** USE CHARACTER VARIABLES TO CREATE MACRO VARIABLES ***;
call symput('start', cstart);
call symput('end', cend);
run; 

*** IN SQL PASS-THRU, USE MACRO VARIABLES IN WHERE STATEMENT TO SUBSET ONE WEEK ***;
Proc Sql
connect to odbc (environment=x user=y p=z);
create table basic.curweek as select * from connection to odbc
(select year, month, week, store, sales, SKU
from datatable
where (&start. <= week and week <= &end.)
order by sku);
disconnect from odbc;
quit;

相关内容

  • 没有找到相关文章

最新更新