SAS:没有匹配的%MACRO语句

时间:2018-05-03 04:07:16

标签: sas

我正在按照已发布的方法来识别匹配的案例。我收到以下错误

 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用于识别匹配的案例对和 控制。初始化Startoldi以控制处理 控制数据集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);

1 个答案:

答案 0 :(得分:2)

据推测,您没有包含宏的开头(即本文前面的%MACRO MATCH(...部分)。这是一个宏,它不打算按照它编写的方式运行 - 你需要包括从%MACRO MATCH%MEND的所有代码然后调用