2015-03-26 2 views
2

Итак, я хочу запустить вложенный цикл для моей макрофункции. Вот мой код, похоже, что SAS не нравится by -1. Есть ли в любом случае код, чтобы второй шаг уменьшить на -1? В этом случае мои yearMix = 1982 и yearMax = 1994.Размер шага в цикле макросов в sas

%Macro theLoop; 
    %Do I = &yearMin+1 %to &YearMax-1; 
     %Do J = &YearMax-1 %to &I by -1; 
      %Meaw; 
     %END; 
    %END; 
%MEND theLoop; 
%theLoop; 

Я получил эту ошибку:

ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: &I by -1
ERROR: The %TO value of the %DO J loop is invalid.
ERROR: The macro THELOOP will stop executing.

ответ

5

Вы указываете свой прирост в макро %do цикла с использованием %by, а не by. Более подробную информацию можно найти в руководстве пользователя here.

В вашем коде SAS пытается оценить &I by -1 как числовое значение.

0
%let yearMin = 1982; 
%let yearMax = 1994; 

%Macro theLoop; 
    %Do I = %eval(&yearMin+1) %to %eval(&YearMax-1); 
     %Do J = %eval(&YearMax-1) %to &I %by -1; 
      %put &i = &j = ; 
     %END; 
    %END; 
%MEND theLoop; 
%theLoop;