Требуемый оператор не найден в выражении: - PullRequest
1 голос
/ 26 мая 2020

В приведенном ниже коде я использую макропеременные в операторе then, однако любой вариант кода, похоже, не работает в одном или другом.

%MACRO LOOP_I;
    DATA JAV_WORK2;
        set WORK.JAV_WORK1;
        %do i = 1 %to 24 %by 1;
            %IF FF in ('CV', 'CV1', 'CV2', 'CVA', 'CVP', 'HAS') and S_TYPE in ('ETR_CARD', 'ETR_PCP', 'ETR_TRX') %THEN MONTH&i_SALES=trx&i;
            %ELSE %IF FF = 'HAS' and LENGTH(GEO_ID) = 6 and S_TYPE = ('ETR_DDD') %THEN MONTH&i_SALES= UNIT&i;
        %end;
    RUN;
%MEND LOOP_I;

%LOOP_I

Когда я пытался удалить% из операторов IF , то я получал «ОШИБКА 180-322: инструкция недействительна или используется в неправильном порядке». TIA

1 Ответ

1 голос
/ 26 мая 2020

Вы можете достичь тех же результатов, используя массивы вместо циклов макросов.

data jav_work2;
    set jav_work1;

    array sales_month[24];
    array trx[24];
    array unit[24];

    if(FF  IN('CV', 'CV1', 'CV2', 'CVA', 'CVP', 'HAS') 
       AND S_TYPE in ('ETR_CARD', 'ETR_PCP', 'ETR_TRX')
    then do;

        do i = 1 to 24;
            sales_month[i] = trx[i];
        end;

            else if(FF = 'HAS' AND length(GEO_ID) = 6 AND S_TYPE = 'ETR_DDD') then do; 
               do i = 1 to 24
                  sales_month[i] = unit[i];
               end;
            end;
    end;
run;

Если вы хотите использовать то же соглашение об именах, вы можете заключить его в макрос и изменить оператор массива sales_month[24] с этим:

array sales_month[24] %do i = 1 %to 24; month&i._sales %end; ;

...