Почему мой код внутри моего макроса не принимается во внимание?

Я пытаюсь написать макрос на SAS, который может создать 50 различных выборок из 1500 человек. Но как только я ввожу %macro, весь следующий код не учитывается должным образом (PROC SURVEYSELECT, DATA, RUN ... Больше нет цвета). Ниже вы найдете мой код. Не могли бы вы взглянуть?

%macro loop(50);
%do i=1 %to 50;
    PROC SURVEYSELECT DATA=WORK.TOP_1()
        METHOD=SRS
        OUT= WORK.ALEA_1
        N=1500;
    RUN;
%end;
%mend;
%loop(50);

Почему тег <sql>?

jarlh 11.04.2018 14:25

Я не понимаю вопроса. Вы имеете в виду, что редактор выделяет код не так, как вы ожидаете, или код выполняется не так, как вы ожидаете?

DomPazz 11.04.2018 14:32

Удалите (50) в операторе макроса. Затем вы можете просто вызвать макрос, например %loop.

J_Lard 11.04.2018 14:36
0
3
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это обычное поведение окна расширенного редактора.

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

Один из обходных путей - добавить следующее в начале определения макроса в строке после оператора %macro:

%local DUMMY;
%let DUMMY = %nrstr(%mend);

Это заставит редактор думать, что он дошел до конца определения макроса, фактически не оказывая никакого влияния на код внутри макроса, что приведет к восстановлению выделения.

Интересный подход. Я бы предложил прокомментировать это с помощью %* fix EG syntax highlighting ;, чтобы другие могли намекнуть на причину кода.

Quentin 11.04.2018 20:48

Вам не нужен макрос. Если вы хотите 50 образцов, используйте опцию SURVEYSELECT REPS = 50.

Спасибо, очень удобно!

Clément Hurel 11.04.2018 15:05

Другие вопросы по теме