【发布时间】:2018-04-28 11:15:54
【问题描述】:
我创建了下面的宏来生成一些基于日期宏的数据集。
%macro pull(date);
proc sql;
create table new&date as
select * from acct
where date=&date.;
quit;
%mend;
所以如果我想为 20170101 20170201 20170301 20170401 20170501 创建数据集,我所能做的就是使用下面的宏
%macro pull(20170101)
%macro pull(20170201)
%macro pull(20170301)
%macro pull(20170401)
%macro pull(20170501)
我现在计划的是创建两个宏变量
%let begin=20170101;
%let end =20170501;
并使用循环创建基于开始和结束的数据集。是否有可能这样做。所以我想要做的是将开始日期和结束日期作为宏变量,并从 acct 数据集中提取开始日期和结束日期之间的记录,并为开始日期和结束日期之间的每个月创建单独的数据集
Note 数据集每年都有每月的日期。
下面是我正在尝试的代码
%let beg="01jan2000"d;
%let end="01jan2001"d;
%macro Test;
%do date=&beg. %to &end.;
proc sql;
create table IPw_&date. as
select *
from sample
where date=&date. quit;
%end;
%mend;
%Test;
【问题讨论】:
-
你试过什么?你知道
INTNX这样的区间函数吗?你知道 SAS 日期值和 SAS 日期格式吗? -
您真的需要单独的数据集吗?为什么不直接使用
where date between &date1 and &date2。 -
您可能对 SAS 宏附录感兴趣,它有一个演示宏列表,其中显示了如何循环日期。请参阅此处的示例代码列表,其中包含完整的说明。 communities.sas.com/t5/SAS-Communities-Library/…
标签: sas