* Iterative simulated daily analysis; * Create macros for yesterday's date; data _null_; attrib yesttxt3 length=$8.; yest=date()-1; call symput('yest', put(yest,$5.)); call symput('yesttxt' ,put(yest,date9.)); call symput('yesttxt2' ,put(yest,mmddyy6.)); run; %put _user_; * ED visits for fever syndrome, by date, NYC; data EDfever; input date mmddyy8. @10 fever 4.; datalines; 11/01/02 242 11/02/02 341 11/03/02 402 11/04/02 344 11/05/02 361 11/06/02 324 11/07/02 314 11/08/02 329 11/09/02 377 11/10/02 424 11/11/02 425 11/12/02 322 11/13/02 382 11/14/02 332 11/15/02 314 11/16/02 323 11/17/02 375 11/18/02 414 11/19/02 347 11/20/02 338 11/21/02 371 11/22/02 328 11/23/02 322 11/24/02 381 11/25/02 432 11/26/02 364 11/27/02 316 11/28/02 299 11/29/02 388 11/30/02 425 12/01/02 410 12/02/02 345 12/03/02 359 12/04/02 348 12/05/02 310 12/06/02 347 12/07/02 357 12/08/02 367 12/09/02 384 12/10/02 373 12/11/02 327 12/12/02 375 12/13/02 346 12/14/02 417 12/15/02 537 12/16/02 386 12/17/02 415 12/18/02 371 12/19/02 402 12/20/02 380 12/21/02 499 12/22/02 522 12/23/02 437 12/24/02 393 12/25/02 375 12/26/02 429 12/27/02 487 12/28/02 552 12/29/02 546 12/30/02 512 12/31/02 336 01/01/03 420 01/02/03 426 01/03/03 403 01/04/03 423 01/05/03 415 01/06/03 412 01/07/03 386 01/08/03 388 01/09/03 391 01/10/03 376 01/11/03 395 01/12/03 440 01/13/03 483 01/14/03 419 01/15/03 398 01/16/03 422 01/17/03 437 01/18/03 465 01/19/03 628 01/20/03 672 01/21/03 613 01/22/03 481 01/23/03 463 01/24/03 523 01/25/03 510 01/26/03 691 01/27/03 668 01/28/03 557 01/29/03 559 01/30/03 626 01/31/03 630 02/01/03 697 02/02/03 828 02/03/03 830 02/04/03 742 02/05/03 665 02/06/03 670 02/07/03 557 02/08/03 686 02/09/03 763 02/10/03 701 02/11/03 594 02/12/03 579 02/13/03 497 02/14/03 459 02/15/03 583 02/16/03 624 02/17/03 332 02/18/03 529 02/19/03 473 02/20/03 476 02/21/03 442 02/22/03 448 02/23/03 471 02/24/03 467 02/25/03 372 02/26/03 371 02/27/03 429 02/28/03 374 ; run %Macro InitializeDates; data _null_; * START AND END DATE OF ANALYSIS, USUALLY WILL BE DATE()-1; startdt=mdy(12,1,02); *First date analyzed in simulation; simdate=mdy(12,1,02); *Initialize value of simulation date that will increase in each iteration; enddt =mdy(2,28,03); *Last date analyzed in simulation; * Generates SAS format and text format dates for use in program; call symput('startdt', put(startdt,$5.)); call symput('simdate', put(simdate,$5.)); call symput('enddt', put(enddt,$5.)); run; %Mend; %InitializeDates; %Macro DataStep; data regdata; set &Dataset; where &SIMDATE-27<=date<=&SIMDATE; observed=&SYND; * Day of week dummy variables; dayoweek=weekday(date); sun=0;mon=0;tue=0;wed=0;thu=0;fri=0;sat=0; if dayoweek=1 then sun=1; else if dayoweek=2 then mon=1; else if dayoweek=3 then tue=1; else if dayoweek=4 then wed=1; else if dayoweek=5 then thu=1; else if dayoweek=6 then fri=1; else if dayoweek=7 then sat=1; run; %Mend; %Macro Analysis; proc reg data=regdata; model observed = mon tue wed thu fri sat ; output out = RegOut stdi = se p = p r = r; run; quit; Data RegOut; attrib date length=8. format=mmddyy8. observed length=8. format=6. predicted length=8. format=6. ; set RegOut; where date=&SIMDATE; predicted=p; keep date observed predicted; run; %Mend; %Macro EmptyFiles; data Results; attrib date length=8. format=mmddyy8. observed length=8. format=6. predicted length=8. format=6. ; run; %Mend; %Macro AppendResults; proc append base=Results data=Regout; run; %Mend; * Add 1 to simdate; %macro Nextdate; data _null_; date=&SIMDATE+1; call symput('SIMDATE',date); run; %mend; * Define a macro that iteratively simulates prospective daily analysis; %macro IterativeAnalysis; %InitializeDates; %EmptyFiles; *Initialize output datasets. Output will be appended each iteration; %do i=&startdt %to &enddt; data _null_; date=&simdate; put date mmddyy8.; run; %let synd=Fever; %let dataset=EDfever; %DataStep; %Analysis; %AppendResults; data _null_; date=&simdate; put ' ' date mmddyy8.; run; %Nextdate; *Add one to simdate for next iteration; %end; %mend; *Run the macro; options nonotes nomprint; %IterativeAnalysis; options notes mprint; * Plot outcome and model prediction; proc gplot data=results; plot (observed predicted)*date/vzero overlay legend; title1 'Plot of observed and predicted ED fever visits'; title2 'based on simulated prospective daily regression analysis'; run; * Acknowledgement: The iterative macro code above is based on similar code shared with us by MATTHEW SEEMAN, CDC;