Пример данных:
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 (это не запустилось. Дало больше ошибок).Я все еще получаю ошибку.
Пожалуйста, помогите.