Was it the PROC IML step that took three hours? I decided to go the DATA Step route as my PC is pretty old. This code managed to get all the six-digits date strings in about 33 seconds. I found that it didn't matter whether I used the input function with the mmddyy format to find the valid dates or a hash table of all the mmddyy6 dates generated by "01Jan2000"d to "31Dec2099"d (this gets "022900" for the complete and unique set) OR the "old school" building of a format and using the put function. Each method took about 33 seconds. Even more curiously, PROC SUMMARY ran faster with the CLASS statement than the BY statement. I used that to find the first, last and range of occurrence.

Since this used the least amount of code I'll offer this:
filename rawurl url "http://www.cs.princeton.edu/introcs/data/pi-10million.txt";
data PiDigits(index=(six_char_date=(six_char_date) position=(position)/unique));
length six_char_date $6;
infile rawurl lrecl=10000000 truncover;
input Digit $1. @@;
Position=_n_-5;
if position>9999996 then input; *Otherwise data step will never stop;
six_char_date=cat(lag5(digit),lag4(digit),lag3(digit),lag2(digit),lag1(digit),digit);
if input(six_char_date,?? mmddyy6.)^=.;
keep position six_char_date;
run;

The nice thing about this data set with the indexes is that the user can filter it on any date which puts out results very quickly, even on my old PC running SAS University Edition. If there is interest,

As you also found, the mean number of occurences is very close to 10. The variance is also very close to 10 and the skewness is the square root of 0.1 . I think there is something going on here. I think I will try the yymmdd6. format of date representation and see how the statistics compare.