Macros 宏错误:找到的位置参数多于定义的参数
样本数据:Macros 宏错误:找到的位置参数多于定义的参数,macros,sas,Macros,Sas,样本数据: Reportstatestatus age male hospid radm30 uniquekey Timemonths clinical_cond1 clinical_cond2 ca1 33 0 1232 1 1 13 0 1 ca1 22 1 2321 1 2 10 1
Reportstatestatus age male hospid radm30 uniquekey Timemonths clinical_cond1 clinical_cond2
ca1 33 0 1232 1 1 13 0 1
ca1 22 1 2321 1 2 10 1 0
ca0 22 1 2222 0 3 10 1 0
我有这样一个宏(由其他人设计的代码):
当我像这样运行宏时:
libname inputf "F:\ccorp\mray\processed\Readmission";
data work.readmdata;
set INPUTF.readm_caonly;
run;
%LET indep = age Male TimeMonths Reportstatestatus Hx_CTSURG
Cardiogenic_Shock COPD MCANCER DIABETES MALNUTRITION DIS_FLUID OBESITY
HEMATOLOGICAL DEMENTIA MAJOR_PSYCH PARALYSIS_FUNCTDIS POLYNEUROPATHY
CHF ARRHYTHMIAS CEREB_HEMORR CEREB_DISEASE VASDIS_WCOMP FIBROSIS_LUNG
PNEUMONIA OTHER_LUNG_DIS DIALYSIS RENALFAILURE DECUBITUS_ULCER ;
(Reportstatestatus之后的变量为临床条件)
它给了我一个错误:
错误:找到的位置参数多于定义的参数
我已经在线研究并尝试了%STR或%NRSTR、%BQUOTE或%SUPERQ(这没有运行。它给出了更多错误)。
我仍然得到错误
请提供帮助。为了测试这一点,一个示例数据将有很大帮助,但我确实认为宏引用功能应该用于单个宏参数,而不是所有参数。在无法进行测试的情况下,我建议尝试以下方法:
libname inputf "F:\ccorp\mray\processed\Readmission";
data work.readmdata;
set INPUTF.readm_caonly;
run;
%LET indep = age Male TimeMonths Reportstatestatus Hx_CTSURG
Cardiogenic_Shock COPD MCANCER DIABETES MALNUTRITION DIS_FLUID OBESITY
HEMATOLOGICAL DEMENTIA MAJOR_PSYCH PARALYSIS_FUNCTDIS POLYNEUROPATHY
CHF ARRHYTHMIAS CEREB_HEMORR CEREB_DISEASE VASDIS_WCOMP FIBROSIS_LUNG
PNEUMONIA OTHER_LUNG_DIS DIALYSIS RENALFAILURE DECUBITUS_ULCER ;
%边际(readmdata,
估计数,
唯一键,
RADM30,
%bquote和indep),
Reportstatestatus,CA1,CA0)
如果宏调用本身存在问题,则不需要数据(甚至不需要所有宏代码)。也就是说,我无法复制你的问题 要进行调试,我将制作一个简单的宏,如:
%MACRO MARGINAL (DSN,PARMS,KEY,DEPENDENT,INDEPENDENT,CLASS,NAME_1,NAME_2);
%put _user_ ;
%MEND MARGINAL;
我使用您的代码成功调用了该宏:
%MARGINAL (%nrbquote(readmdata, /* Name of original dataset */
estimates_slopeCA, /* Parameter estimates from model */
UniqueKey, /* Key */
RADM30, /* Dependent variable */
indep, /* Independent variables listed */
Reportstatestatus, /* Class variable for marginal effects */
CA1, /* User-supplied name of first data element*/
CA0)); /* User-supplied name of second data element*/
我所说的“成功”是指它执行了宏,并且没有生成错误报告。由于使用了%NRBQUOTE(),因此仅为DSN参数提供了一个值。这可能不是预期的行为,但不会产生错误。即使我删除了%NRBQUOTE,也不会得到错误
我建议您编辑您的问题,以制作一个可复制的示例 我会将函数放在代码中,而不是宏输入参数中。 然后在使用中强制引用它。。。
如果你给我你的全部宏观辩护,我可以帮你 只有最后两个参数可能需要应用宏引用才能进行调用。这两个参数需要字符串来匹配指定类变量的可能值。即使这样,只有当值包含逗号、前导空格、不平衡引号或不平衡括号时,才需要添加宏引号
%MARGINAL
(DSN=cabg /* Name of original dataset */
,PARMS=parms_OpDeath /* Parameter estimates from model */
,KEY=medRecN /* Key */
,DEPENDENT=yom /* Dependent variable */
,INDEPENDENT=age_n /* Independent variables listed */
,CLASS=GENDER /* Class variable for marginal effects */
,NAME_1=%bquote(1, Male) /* User-supplied name of first data element*/
,NAME_2=%bquote(2, Female) /* User-supplied name of second data element*/
);
其他参数都需要数据集或变量名或其他有效的SAS语法,因此不需要添加宏引用
%MARGINAL
(DSN=cabg /* Name of original dataset */
,PARMS=parms_OpDeath /* Parameter estimates from model */
,KEY=medRecN /* Key */
,DEPENDENT=yom /* Dependent variable */
,INDEPENDENT=age_n /* Independent variables listed */
,CLASS=GENDER /* Class variable for marginal effects */
,NAME_1=%bquote(1, Male) /* User-supplied name of first data element*/
,NAME_2=%bquote(2, Female) /* User-supplied name of second data element*/
);
我试过这个建议,但还是有错误。我不知道如何显示数据。我有一个巨大的表。你不需要显示实际数据或整个数据,只需要几行来显示每个变量可能采用的值,这将有助于确定要使用的正确引用函数以及如何调用..我已经输入了一段数据。谢谢@John doe我仍然无法重现您的问题,因为我没有数据集。顺便问一下,您是否将indep作为宏变量&indep调用。我希望能提供更多信息,但我不知道如何或如何提供。数据片段显示每个变量的类型。我有100000行这样的行。谢谢这以前有用吗?如果是,那么您能否提供一个对
%marginal
有效的示例调用。还可以尝试使用宏选项,如options symbolgen代码>并可能显示有关错误消息的更多日志。我们需要确保错误消息与%marginal
相关。为什么要包含%NRBQUOTE()
?没有什么需要引用的。也许您还没有结束之前的宏引用尝试。你能从一个新的SAS会话开始并重试吗?很抱歉,我在发布后看到了宏,我刚刚注意到你(或)在错误的位置%MARGINAL(%nrbquote(readmdata),/*原始数据集名称/estimates_slopeCA,/来自模型的参数估计/UniqueKey,/Key/RADM30,/Dependent variable/indep,/列出的自变量/Reportstatestatus,/Class variable for marginal effects/CA1,/用户提供的第一个数据元素名称*/CA0);/*用户提供的第二个数据元素的名称*/