Я следую опубликованному методу, чтобы определить подходящие случаи. Я получаю следующую ошибку
ERROR: No matching %MACRO statement for this %MEND statement.
WARNING: Apparent invocation of macro MATCH not resolved.
137 %MEND MATCH;
138
139 %MATCH (g.ps_match,Match4,scase4,scontrol4, abuser, 0.0001);
_
180
ERROR 180-322: Statement is not valid or it is used out of proper order.
Как правильно назвать макрос?
Я использую SAS University Edition.
Метод из
http://www2.sas.com/proceedings/sugi25/25/po/25p225.pdf
Часть 2. Выполнение матча
Следующая часть макропрограммы выполняет сопоставление и
выводит согласованные пары. Во-первых, набор данных случаев
выбран. Curob
используется для отслеживания текущего дела.
Matchto
используется для идентификации совпадающих пар случаев и
управления. Start
и oldi
инициализируются для управления обработкой
Цикл DO набора данных управления.
data &lib..&matched.
(drop=Cmatch randnum aprob cprob start
oldi curctrl matched);
set &lib..&SCase. ;
curob + 1;
matchto = curob;
if curob = 1 then do;
start = 1;
oldi = 1;
end;
Далее выбирается набор данных управления. Обработка начинается в
первое бесподобное наблюдение. Набор данных ищется
пока совпадение не найдено или не определено, совпадение не может быть
сделал. Проверка ошибок выполняется, чтобы избежать бесконечного цикла.
Curctrl
используется для отслеживания текущего контроля.
DO i = start to n;
set &lib..&Scontrol. point = i nobs = n;
if i gt n then goto startovr;
if _Error_ = 1 then abort;
curctrl = i;
Если показатель склонности текущего случая (апроб) соответствует
оценка склонности текущего контроля (cprob), затем совпадение
был найден. Обновите Cmatch до 1 = Да. Выведите контроль.
Обновление соответствует, чтобы отслеживать последний соответствующий элемент управления. Выход
цикл DO. Если показатель склонности текущего контроля
больше, чем показатель склонности текущего случая, то нет
совпадение будет найдено для текущего случая. Остановить цикл DO
обработка.
if aprob = cprob then
do;
Cmatch = 1;
output &lib..&matched.;
matched = curctrl;
goto found;
end;
else if cprob gt aprob then
goto nextcase;
startovr: if i gt n then
goto nextcase;
END;
/ * конец DO LOOP * /
nextcase:
if Cmatch=0 then start = oldi;
found:
if Cmatch = 1 then do;
oldi = matched + 1;
start = matched + 1;
set &lib..&SCase. point = curob;
output &lib..&matched.;
end;
retain oldi start;
if _Error_=1 then _Error_=0;
run;
%MEND MATCH;
ЗАЯВЛЕНИЕ О МАКРОМАТЧЕ
Ниже приведены операторы вызова макроса
программа MATCH. Первый выполняет 4-значный матч;
второй выполняет трехзначное сопоставление.
%MATCH(STUDY,Propen,Match4,SCase4,
SContrl4,Interven,.0001);
%MATCH(STUDY,Propen,Match3,SCase3,
SContrl3,Interven,.001);