2016-10-06 2 views
0

люди.do while loop in SAS macro

вот мой код:

%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; 

в основном, я хочу, чтобы создать переменную уу, когда переменная х меньше, чем значение var1;

Но выход не дал мне переменной yy.

Может ли кто-нибудь помочь мне в этом?

Thx!

+1

Почему вы используете макрокод? – Tom

+0

хорошо вопрос! потому что я должен, это простая часть очень большого проекта, я должен достичь этого, не меняя других частей. –

+0

Сначала выясните, какой код вам нужно запустить. Затем выясните, как сгенерировать этот код с помощью макропеременных или макро логики. – Tom

ответ

0

Вы вводите в заблуждение %do и do.

%do - это если вы хотите повторить раздел кода снова и снова, как если бы вы набрали его несколько раз. Аргументы для продолжения/окончания цикла %do должны быть известны до того, как набор данных будет открыт - они должны быть текстовыми, или они должны быть текстом, содержащимся в макропеременной (а не данными в одном).

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? Поскольку переменные не участвуют в вычислении, конец цикла фиксирован? – Reeza

+1

Вот что я имею в виду под моим последним абзацем ... Я не понимаю, почему это цикл. Я проиллюстрировал это правильно, чтобы показать отличие от цикла макросов, но да, почему это цикл ускользает от меня. – Joe