【发布时间】:2018-05-22 06:17:19
【问题描述】:
样本数据:
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
我有一个这样的宏(代码由别人设计):
DSN = Dataset Name
PARMS = Parameters from multivariate model
KEY = Unique ID or key to match observations
DEPENDENT = Dependent variable specified in model
INDEPENDENT = Independent variables separated with spaces
CLASS = Class variable of interest to calculate marginal effects
NAME_1 = User provided name for the first data element of class variable
(Name limited to 30 characters)
NAME_2 = User provided name for the second data element of class variable
(Name limited to 30 characters)
***************************************************************
EXAMPLE OF MACRO CALL
***************************************************************/
%MARGINAL(cabg, /* Name of original dataset */
parms_OpDeath, /* Parameter estimates from model */
medRecN, /* Key */
yom, /* Dependent variable */
age_n, /* Independent variables listed */
GENDER, /* Class variable for marginal effects */
Male, /* User-supplied name of first data element*/
Female); /* User-supplied name of second data element*/
/****************************************************************/
%MACRO MARGINAL (DSN,PARMS,KEY,DEPENDENT,INDEPENDENT,CLASS,NAME_1,NAME_2);
data OUT_1;
length &CLASS $30
;
set &DSN (rename=(&CLASS = OLD_CLASS )) ;
&CLASS = "&NAME_1";
RUN;
**** Apply model to entire data;
PROC LOGISTIC inmodel= &PARMS Descending;
score data=OUT_1
OUT= PRED_1 (KEEP = &KEY &DEPENDENT &CLASS &INDEPENDENT OLD_CLASS P_1);
title "Applying the Risk Model to Entire Data Assuming Every Observation’s
Class Variable Value = First Data Element of the Class Variable";
RUN;
data OUT_2;
length &CLASS $
30
;
set &DSN (rename=(&CLASS = OLD_CLASS )) ;
&CLASS = "&NAME_2";
RUN;
**** Apply model to entire data;
PROC LOGISTIC inmodel= &PARMS Descending;
score data=OUT_2
OUT= PRED_2 (KEEP = &KEY &DEPENDENT &CLASS &INDEPENDENT OLD_CLASS P_1);
title1 "Applying the Risk Model to Data assuming Every Observation’s Class
Variable Value = Second Data Element of the Class Variable";
RUN;
**** Join the data;
data OUT_1_N;
set PRED_1;
p_&NAME_1 = p_1;
KEEP &KEY &DEPENDENT &CLASS &INDEPENDENT OLD_CLASS p_&NAME_1 ;
RUN;
proc sort data=OUT_1_N; by &KEY; RUN;
data OUT_2_N;
set PRED_2;
p_&NAME_2 = p_1;
KEEP &KEY &DEPENDENT &CLASS &INDEPENDENT OLD_CLASS p_&NAME_2 ;
RUN;
proc sort data=OUT_2_N; by &KEY; run;
data join;
merge OUT_1_N OUT_2_N;
by &KEY;
RUN;
title "Compare Observed Response Variable: Class Variable Value 1 vs. Class
Variable Value 2";
PROC TTEST data=join;
class OLD_CLASS;
var &DEPENDENT;
RUN;
title "Compare predicted Response Variable with Recycle Prediction Method";
PROC MEANS data=join n mean std min max lclm uclm;
var p_&NAME_1 p_&NAME_2 ;
RUN;
PROC TTEST data=join;
paired p_&NAME_1 * p_&NAME_2;
RUN;
%MEND MARGINAL;
当我像这样运行宏时:
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后的变量为临床情况)
%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*/
它给了我错误:
错误:找到的位置参数比定义的多。
我在网上研究并尝试过,%STR 或 %NRSTR、%BQUOTE 或 %SUPERQ(这没有运行。它给出了更多错误)。 我仍然得到错误。
请帮忙。
【问题讨论】:
-
这有没有用过?如果是,那么您能否提供一个对
%marginal有效的示例调用。还可以尝试使用options symbolgen;之类的宏选项,并可能在错误消息周围显示更多日志。我们需要确保错误消息与%marginal相关。 -
为什么包含
%NRBQUOTE()?没有什么需要引用的。也许您还没有结束之前的宏引用尝试。您可以从一个新的 SAS 会话开始并重试吗?