This might help?
Hits #77 Using a ring of four generations of a SAS dataset
inspired by
https://goo.gl/FQJGmj
https://communities.sas.com/t5/Base-SAS-Programming/SAS-Automation-Running-a-report-for-JUST-a-few-previous-days/m-p/329245
* documentation;
http://analytics.ncsu.edu/sesug/2006/SC18_06.PDF
With generation datasets you do not need to change your
code with daily dataset refreshes.
The ring of datasets rolls off the latest dataset and adds the newest, so
you can print yesterdays and todays data using, with relative addressing.
proc print data=genum(gennum=-1);run;quit; * yesterdays data load;
proc print data=genum;run;quit; * todays dataload
You have easy access to yesterdays data
HAVE ( Will show you how to create these)
==========================================
Gen Member
# Name Num Type One variable doc) Also Dataset name
1 GENUM DATA Base DOC='This is Fri Feb 3, 2017' GENUM
2 GENUM -3 DATA DOC=This is Tue Jan 31, 2017 GENUM#001
3 GENUM -2 DATA DOC=This is Wed Feb 1, 2017 GENUM#002
4 GENUM -1 DATA DOC=This is Thu Feb 2, 2017 GENUM#003
proc print data=genum(gennum=-3);run;quit;
proc print data=genum(gennum=-2);run;quit;
proc print data=genum(gennum=-1);run;quit;
proc print data=genum(gennum;run;quit;
Tue Jan 31, 2017
Wed Feb 1, 2017
Thu Feb 2, 2017
Fri Feb 3, 2017
WANT One day later. Roll off "Tue Jan 31, 2017"(oldest) and add "Sat Feb 3,2017";
==================================================================================
* this updates the ring;
data genum;
retain doc 'This is Sun Feb 5, 2017';
run;quit;
Run exactly the same proc print code but drop off the oldest;
proc print data=genum(gennum=-3);run;quit;
proc print data=genum(gennum=-2);run;quit;
proc print data=genum(gennum=-1);run;quit;
proc print data=genum(gennum;run;quit;
Wed Feb 1, 2017
Thu Feb 2, 2017
Fri Feb 3, 2017
Sat Feb 4, 2017
SOLUTION
========
proc datasets lib=work kill;
run;quit;
* prime the ring this is a base not interested in this one;
data genum(genmax=4);
retain doc 'This is Tue Jan 31, 2017';
run;quit;
data genum;
retain doc 'This is Wed Feb 1, 2017';
run;quit;
data genum;
retain doc 'This is Thu Feb 2, 2017';
run;quit;
data genum;
retain doc 'This is Fri Feb 3, 2017';
run;quit;
proc contents data=work._all_;
run;quit;
/*
Gen Member
# Name Num Type
1 GENUM DATA
2 GENUM -3 DATA
3 GENUM -2 DATA
4 GENUM -2 DATA
*/
Now lets roll the oldest one off and todays (same code)
=======================================================
data genum;
retain doc 'This is Sat Feb 4, 2017';
run;quit;
* lets see what happend;
proc contents data=work._all_;
run;quit;
* new ring;
proc report data=genum(gennum=-3);
run;quit;
proc report data=genum(gennum=-2);
run;quit;
proc report data=genum(gennum=-1);
run;quit;
proc report data=genum;
run;quit;
This is Wed Feb 1, 2017
This is Thu Feb 2, 2017
This is Fri Feb 3, 2017
This is Sat Feb 4, 2017
Do it again (same code)
===========
data genum;
retain doc 'This is Sun Feb 5, 2017';
run;quit;
proc contents data=work._all_;
run;quit;
* new ring;
proc report data=genum(gennum=-3);
run;quit;
proc report data=genum(gennum=-2);
run;quit;
proc report data=genum(gennum=-1);
run;quit;
proc report data=genum;
run;quit;
This is Thu Feb 2, 2017
This is Fri Feb 3, 2017
This is Sat Feb 4, 2017
This is Sat Feb 4, 2017
... View more