co_fund 发表于 2016-1-27 13:36 
%screen的代码是什么?
从目前的情况看,应该是不够完善导致上一行命令与下一行命令之间相互影响
我的推测 ...
%macro screen(input1,input2,input3,input4,output1,output2,output3,output4);
data &output1 REPLACE;
set &input1;
ipnum=1;
chemo=0;
radi=0;
HGF=0;
ems=0;
surgb1=0;
surgb2=0;
surgc1=0;
surgc2=0;
dx_date1=LEFT(SRVC_BGN_DT);
dtdx=SUBSTR(dx_date1, 7, 2); modx=SUBSTR(dx_date1, 5, 2); yrdx=SUBSTR(dx_date1, 1, 4);
cldt=MDY(modx, dtdx, yrdx);
/*revenue*/
IF UB_92_REV_CD_GP_1 in (0331, 0332, 0335) THEN chemo=1;
IF UB_92_REV_CD_GP_1 in (0330, 0333) THEN radi=1;
IF UB_92_REV_CD_GP_1 in (0450, 0451, 0452, 0456, 0459, 0981) THEN ems=1;
/*icd-9*/
ARRAY dgncdclms(9) DIAG_CD_1-DIAG_CD_9;
do i=1 to 9;
if dgncdclms(i) in ('V581' 'V662' 'V672') THEN chemo=1;
end;
drop i;
*CPT code;
ARRAY prcdr(6) PRCDR_CD_1-PRCDR_CD_6;
do j=1 to 6;
if prcdr(j) in ('J8510' 'J8520' 'J8521' 'Q0083' 'Q0084' 'Q0085' 'C9214' 'S0116' 'C9257' 'C9125' 'C9235')
OR prxmatch('/J[8][5][3-9]\d/', prcdr(j))
OR prxmatch('/J[8][6-9]\d\d/', prcdr(j))
OR prxmatch('/J[9]\d\d\d/', prcdr(j))
OR prcdr(j) in ( 96400:96549 ) then chemo=1;
if prcdr(j) in ( 77401:77499, 77750:77799, 77261:77399) then radi=1;
IF prcdr(j) in ('J1440' 'J1441' 'J2505' 'J2820' 'J0880' 'J0881' 'J0885' 'Q0136' 'Q0137') THEN HGF=1;
IF prcdr(j) in (19120, 19160, 19162) THEN surgb1=1;
IF prcdr(j) in (19240, 19220, 19180) THEN surgb2=1;
IF prcdr(j) in (44140:44160) THEN surgc1=1;
IF prcdr(j) in ( 45110:45121) THEN surgc2=1;
end;
drop j;
KEEP BENE_ID chemo radi HGF ems surgb1 surgb2 surgc1 surgc2 cldt ipnum;
run;
PROC SORT DATA=&output1;
BY BENE_ID;
RUN;
DATA &output1;
MERGE &output1(IN=k) &input4;
BY BENE_ID;
IF k;
RUN;
DATA &output1;
SET &output1;
pryrdif=YRDIF(cldt, dod, 'ACTUAL');
IF 0<pryrdif<0.5;
DROP k;
RUN;
data &output2 REPLACE;
set &input2;
chemo=0;
radi=0;
HGF=0;
ems=0;
surgb1=0;
surgb2=0;
surgc1=0;
surgc2=0;
dx_date1=LEFT(SRVC_BGN_DT);
dtdx=SUBSTR(dx_date1, 7, 2); modx=SUBSTR(dx_date1, 5, 2); yrdx=SUBSTR(dx_date1, 1, 4);
cldt=MDY(modx, dtdx, yrdx);
if PRCDR_CD in ('J8510' 'J8520' 'J8521' 'Q0083' 'Q0084' 'Q0085' 'C9214' 'S0116' 'C9257' 'C9125' 'C9235')
OR prxmatch('/J[8][5][3-9]\d/', PRCDR_CD)
OR prxmatch('/J[8][6-9]\d\d/', PRCDR_CD)
OR prxmatch('/J[9]\d\d\d/', PRCDR_CD)
OR PRCDR_CD in ( 96400:96549 ) then chemo=1;
if PRCDR_CD in ( 77401:77499, 77750:77799, 77261:77399) then radi=1;
IF PRCDR_CD in ('J1440' 'J1441' 'J2505' 'J2820' 'J0880' 'J0881' 'J0885' 'Q0136' 'Q0137') THEN HGF=1;
IF PRCDR_CD in (19120, 19160, 19162) THEN surgb1=1;
IF PRCDR_CD in (19240, 19220, 19180) THEN surgb2=1;
IF PRCDR_CD in (44140:44160) THEN surgc1=1;
IF PRCDR_CD in ( 45110:45121) THEN surgc2=1;
KEEP BENE_ID chemo radi HGF ems surgb1 surgb2 surgc1 surgc2 cldt;
run;
PROC SORT DATA=&output2;
BY BENE_ID;
RUN;
DATA &output2;
MERGE &output2(IN=k) &input4;
BY BENE_ID;
IF k;
RUN;
DATA &output2;
SET &output2;
pryrdif=YRDIF(cldt, dod, 'ACTUAL');
IF 0<pryrdif<0.5;
drop k;
RUN;
DATA &output3 REPLACE;
SET &input3;
dx_date1=LEFT(SRVC_BGN_DT);
dtdx=SUBSTR(dx_date1, 7, 2); modx=SUBSTR(dx_date1, 5, 2); yrdx=SUBSTR(dx_date1, 1, 4);
cldt=MDY(modx, dtdx, yrdx);
ARRAY dgncdclms(5) DIAG_CD_1-DIAG_CD_5;
do i=1 to 5;
if dgncdclms(i) in ('V581' 'V662' 'V672') THEN chemo=1;
end;
drop i;
KEEP BENE_ID chemo radi HGF ems surgb1 surgb2 surgc1 surgc2 cldt;
RUN;
PROC SORT DATA=&output3;
BY BENE_ID;
RUN;
DATA &output3;
MERGE &output3(IN=k) &input4;
BY BENE_ID;
IF k;
RUN;
DATA &output3;
SET &output3;
pryrdif=YRDIF(cldt, dod, 'ACTUAL');
IF 0<pryrdif<0.5;
DROP k;
RUN;
data &output4 REPLACE;
SET &output3 &output1 &output2;
keep BENE_ID chemo radi HGF ems surgb1 surgb2 surgc1 surgc2 cldt ipnum;
run;
%mend screen;