You say PROC SURVEYSELECT "takes forever." Can you post the code you are using? Do you need to perform stratified sampling by month, or do you just want 10% of the total number of observations?
Most of the time for extracting a subset is reading the original data and writing the sample, which will not change if you use the DATA step or DS2. Here is an example of using SURVEYSELECT to extract 10% of a data set with 5M observations. It takes about 2.5 seconds for this example.
%let N = 5000000;
data Have;
array x[5];
do i = 1 to &N;
do j = 1 to dim(x);
x[j] = i + j;;
output;
end;
end;
run;
proc surveyselect data=Have out=Sample seed=12345
method=srs /* sample w/o replacement */
samprate=0.1; /* number of observations in sample */
run;
If you have twice as many variables, the writing phase will take twice as long. If you have many character variables, that will also slow down the writing, but I don't think either of those facts will change if you use DS2, so consider using a KEEP statement on the DATA= statement to limit the input data set to only those variables that will be used in subsequent analyses.