ejemplos de macros en sas
lĂmite% do% mientras iteraciones (1)
Quiero ejecutar un ciclo while / until en una función de macro, y tener su número máximo de iteraciones limitadas. Encontré cómo hacerlo en sas ''habituales'':
data dataset;
do i=1 to 10 until(condition); /*10 iterations max */
/* stuff */
end;
run;
pero si lo intento en una función de macro:
%macro mf;
data dataset;
%do i=1 %to 10 %until(nrow(X)>10); /*10 iterations max */
/* stuff */
%end;
run;
%mend;
%mf;
Obtengo estos errores:
ERROR: Improper use of macro reserved word until.
ERROR: A dummy macro will be compiled.
ERROR: Required operator not found in expression: 10 %until(nrow(X)>10)
ERROR: The %TO value of the %DO I loop is invalid.
ERROR: The macro MF will stop executing.
¿Cuál es la forma correcta de limitar iteraciones de bucles en macro-funciones?
Aquí hay un conjunto de datos en caso de que quiera probar ideas:
DATA dataset;
input X Y Z;
cards;
10 0 20
50 20 60
90 60 30
run;
El siguiente es un ejemplo de lo que puede usar:
%macro mf;
%let i=0;
%do %until(&onechar=e or &i=10);
%let i=%eval(&i+1);
%let onechar=%substr(abcdefghij,&i,1);
%end;
%put onechar=&onechar;
%put i=&i;
%mend mf;
%mf;
El macro loop se detiene si encuentra "e" o i = 10.