【发布时间】:2016-05-07 19:00:48
【问题描述】:
所以我有这段代码可以正常运行一年,但我需要将其转换为循环,以便它可以在 1970 年到 2015 年之间运行多年。
这是我在 %let 语句中指定的 1 年代码。
%let year=1970
rsubmit;
data home.historical_returns_&year;
set home.crspdata;
where (year <= &year - 1) and (year >= &year - 5);
returns_count + 1;
by id year;
if first.id or missing(tot_ret) then returns_count = 1;
run;
endrsubmit;
到目前为止,该代码对我来说非常有用。现在,我正在尝试使用循环,所以我会在 1970 年到 2015 年期间使用它。
我想出了这个。看起来效果不错,但年份停留在 1970 年。
%macro GMV;
rsubmit;
%do year=1970 %to 2015;
data home.historical_returns_&year;
set home.crspdata;
where (year <= &year - 1) and (year >= &year - 5);
returns_count + 1;
by id year;
if first.id or missing(tot_ret) then returns_count = 1;
run;
%end;
endrsubmit;
%mend GMV;
%GMV
在日志中,我看到名称中的 &year 实际上从未从 1970 年到 1971 年到 1972 年等发生变化。所以我最终没有得到我需要的 45 个不同的数据集。
有人遇到过这个问题吗?
谢谢!
【问题讨论】:
-
远程 SAS 会话中宏变量 YEAR 的值是多少?