2016-10-06 71 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