我正在按照已发布的方法来识别匹配的案例。我收到以下错误
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大学版。
该方法来自 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;
如果当前案例(aprob)的倾向得分与 当前控制(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;
MACRO MATCH CALL声明 以下是宏的调用语句 节目MATCH。第一个执行4位数匹配; 第二个执行3位数匹配。
%MATCH(STUDY,Propen,Match4,SCase4,
SContrl4,Interven,.0001);
%MATCH(STUDY,Propen,Match3,SCase3,
SContrl3,Interven,.001);
答案 0 :(得分:2)
据推测,您没有包含宏的开头(即本文前面的%MACRO MATCH(...
部分)。这是一个宏,它不打算按照它编写的方式运行 - 你需要包括从%MACRO MATCH
到%MEND
的所有代码然后调用