求SAS大神帮忙看看这个代码出现什么问题?一直跑不了
/***SAS 宏程序Time_Stratified,参数说明见表5***/
%MACRO Time_Stratified(IN_DSN = ,OUT_DSN = ,
DATE_VAR = ,
LAG_EFFECT = ,
LAG_VARS = ,
COUNTS_VAR = ) ;
/***按照日期排序,方便滞后效应设置,生成数据集TEMP_SORT***/
PROC SORT DATA =&IN_DSN OUT = TEMP_SORT;
BY &DATE_VAR;
RUN;
/***根据滞后效应( LAG_EFFECT = ) ,构造EXPAND过程CONVERT 语句部分CODE***/
DATA _NULL_;
IF FIND( "&LAG_EFFECT", '-') THEN DO;
LAG1 = INPUT( SCAN( " &LAG_EFFECT" ,1, '-') , 12. );
LAG2 = INPUT( SCAN( " &LAG_EFFECT" ,2, '-') , 12. );
END;
ELSE DO;
LAG1 = &LAG_EFFECT;
LAG2 = &LAG_EFFECT;
END;
LAG = LAG1;
/***滞后天数***/
MOVAVE = LAG2 - LAG1 + 1; /***移动平均天数***/
TRIMLEFT = LAG2; /***缺失天数***/
IF LAG^ = 0 THEN
CODE = CATX( " ","LAG" ,LAG) ;
IF MOVAVE^ = 0 THEN
CODE = CATX( " ",CODE,"MOVAVE",MOVAVE) ;
IF TRIMLEFT^ = 0 THEN
CODE = CATX( " " ,CODE,"TRIMLEFT" ,TRIMLEFT);
CALL SYMPUT( 'CODE',CODE) ;
RUN;
/***处理滞后效应,包括LAG?MOVAVE?TRIMLEFT等转换操作,生成数据集TEMP_LAG***/
PROC EXPAND DATA = TEMP_SORT METHOD = NONEout = TEMP_LAG(DROP = &LAG_VARS WHERE = (NOTMISSING(LAG_ %SYSFUNC(SCAN(&LAG_VARS,1)))));
%DO I = 1% TO %SYSFUNC( COUNTW( &LAG_VARS) );
%LET VAR_NAME = %SYSFUNC( SCAN( &LAG_VARS,&I) );
CONVERT &VAR_NAME = LAG_&VAR_NAME /TRANSFORMIN = ( &CODE);
%END;
ID &DATE_VAR;
RUN;
/***将资料整理成列联表形式,生成数据集TEMP_STRATUM***/
DATA TEMP_STRATUM;
/***CASE_POINT 为病例期指针位置***/
SET TEMP_LAG NOBS = N CUROBS = CASE_POINT;
/***CASE_YEAR 为病例期年份***/
CASE_YEAR = YEAR( &DATE_VAR) ;
/***CASE_MONTH 为病例期月份***/
CASE_MONTH = MONTH( &DATE_VAR) ;
/***CASE_WEEKDAY 为病例期星期几***/
CASE_WEEKDAY =WEEKDAY( &DATE_VAR) ;
/***STRATUM 为分层变量***/
STRATUM = CASE_POINT;
Y = 1; OUTPUT; /* Y = 1 表示病例* /
/***CTRL_POINT 为对照期指针位置,初步指定对照期位置为CASE_POINT 前后30 天***/
DO CTRL_POINT =CASE_POINT-30 TO CASE_POINT-1,
CASE_POINT + 1 TO CASE_POINT + 30;
SET TEMP_LAG POINT = CTRL_POINT;
/***精确指定对照期位置***/
IF 1 < = CTRL_POINT < = N AND
YEAR( &DATE_VAR) = CASE_YEAR AND
MONTH( &DATE_VAR) = CASE_MONTH AND
WEEKDAY( &DATE_VAR) = CASE_WEEKDAY
THEN DO; Y = 0; OUTPUT; END;
/***Y = 0 表示对照***/
/***避免日志出现无意义提示信息***/
_ERROR_ = 0;
END;
DROP CASE_YEAR CASE_MONTH CASE_WEEKDAY;
RUN;
/***根据频数变量COUNTS _VAR 将列联表展开,生成数据集&OUT_DSN***/
DATA &OUT_DSN;
SET TEMP_STRATUM;
BY STRATUM;
RETAIN N;
IF FIRST.STRATUM THEN N = &COUNTS_VAR;
DO I = 1 TO N;
OUTPUT;
END;
DROP N;
RUN;
%MEND Time_Stratified;
/***调用宏程序Time_Stratified***/
%Time_Stratified(IN_DSN = TEST,OUT_DSN = TIME_STRATIFIED,DATE_VAR = DATE,LAG_EFFECT = 0,LAG_VARS = TEMP PM10 SO2,COUNTS_VAR = COUNT)