2016-10-06 74 views
0

人。尽管在SAS宏的循环

这里是我的代码:

%macro loop; 
%let var1=10; 
%do %while (&var1.>x); 
    counter=&var1.; 
    yy=1/(1+x); 
    end; 
    %let var1=%eval(&var1.-1); 
%end; 
%mend loop; 
data tmp; 
    input x; 
datalines; 
1 
2 
3 
; 
run; 
%let num=1; 
data y; 
set tmp; 
%loop; 
run; 

基本上,我想创建一个变量YY当变量x小于VAR1的价值;

但输出并没有给我变量yy。

任何人都可以帮助我吗?

Thx!

+1

你为什么使用宏代码? – Tom

+0

好问题!因为我必须这么做,这是一个非常大的项目中的一个简单部分,我必须在不更改其他部分的情况下实现这一目标。 –

+0

首先找出你需要运行的代码。然后找出如何使用宏变量或宏逻辑来生成该代码。 – Tom

回答

0

你很混淆%dodo

%do是如果你想重复一段代码,就好像你已经输入了很多次一样。在打开数据集之前,必须知道继续/结束循环的参数 - 它们必须是文本,或者它们必须是包含在宏变量(而不是一个数据)中的文本。

do是如果你想迭代一个数据步骤变量。继续/结束循环的参数可以是来自数据集的数据,也可以是文本,也可以是数据集变量或存储在宏变量中的文本的值。

所以,你想:

%let var1=C; 
data want; 
    x= 3; 
    counter=0; 
    do &var1. = 10 to 1 by -1 while (&var1. > x); 
     yy = 1/(1+x); 
     counter=counter+1; 
    end; 

run; 

我不知道你为什么在这里循环,虽然。你可以确定这个答案没有任何循环。

+0

这样做while while循环有意义吗?由于变量不参与计算,所以循环的结尾是固定的? – Reeza

+1

这就是我最后一段的意思......我不明白为什么这是一个循环。我正确地说明它是为了显示与宏循环的区别,但是,为什么这是一个循环逃脱了我。 – Joe