Loops Do-To循环的上限条件

Loops Do-To循环的上限条件,loops,sas,Loops,Sas,我是SAS的新手,有一个基本问题 我正在编写一个宏,其中包含从I=1到n的Do To循环。我想以一年是小于2005年还是大于2005年为条件。如果小于n=10,否则n=11 年份变量已经包含在宏调用中,所以我觉得这应该很容易,但我正在努力 例如,类似以下代码的内容将是理想的: %do i= 1 %to (if &year. < 2005 then 10; else 11) %doi=1%到(如果&year.

我是SAS的新手,有一个基本问题

我正在编写一个宏,其中包含从I=1到n的Do To循环。我想以一年是小于2005年还是大于2005年为条件。如果小于n=10,否则n=11

年份变量已经包含在宏调用中,所以我觉得这应该很容易,但我正在努力

例如,类似以下代码的内容将是理想的:

%do i= 1 %to (if &year. < 2005 then 10; else 11)
%doi=1%到(如果&year.<2005那么10;否则11)
然而,这似乎不起作用。有没有其他方法可以轻松实现这一点?或者使用与上面类似的东西


谢谢!非常感谢你的帮助

对于这个问题,您可以利用SAS将逻辑表达式转换为0/1结果这一事实

%do i= 1 %to %eval(10 + (&year >= 2005)) ;
对于更一般的条件,只需为上限设置另一个变量,并使用%IF/%THEN逻辑进行设置

%if &year < 2005 %then %let upper=10;
%else %let upper=11;
%do i= 1 %to &upper;
%如果&year<2005%,则%let upper=10;
%否则%设上限=11;
%i是否=1%至&upper;

对于此问题,您可以利用SAS将逻辑表达式转换为0/1结果这一事实

%do i= 1 %to %eval(10 + (&year >= 2005)) ;
对于更一般的条件,只需为上限设置另一个变量,并使用%IF/%THEN逻辑进行设置

%if &year < 2005 %then %let upper=10;
%else %let upper=11;
%do i= 1 %to &upper;
%如果&year<2005%,则%let upper=10;
%否则%设上限=11;
%i是否=1%至&upper;

谢谢你,这工作做得很好!这是一个基本的解决方案。谢谢你,这非常有效!这是一个基本的解决办法。