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);/*用户提供的第二个数据元素的名称*/