Hi, I think your code is the same as mine. the condition in proc sql will never be true. data have; input id effective_dt mmddyy10.; cards; 1 01/01/2009 2 11/30/2009 3 01/01/2010 4 11/30/2010 5 01/01/2011 6 11/30/2011 7 ; %let experience_dt= "05jan2012"d; %let oldest_dt = %sysfunc(intnx(month,&experience_dt,-30,begin)); %let newest_dt = %sysfunc(intnx(month,&experience_dt,-2,end)); %let oldest_yr = %sysfunc(year(&oldest_dt)); %let newest_yr = %sysfunc(year(&newest_dt)); %put &experience_dt &oldest_dt &newest_dt &oldest_yr &newest_yr; %macro x(); %do i = &oldest_yr %to &newest_yr; %let newyear = %sysfunc(mdy(1,1,&i)); %let old_dt = &oldest_dt; %let new_dt = &newest_dt; %let new_yr = &newyear; proc sql; create table want&i as select * from have where effective_dt >= %sysfunc(max(&old_dt,&new_yr)) and effective_dt < %sysfunc(min(&new_dt,&new_yr)) ; %end; quit; %mend; %x();
... View more