

/********************************************************************/
/********************************************************************/
/*                                                                  */
/*  Purpose:  Sampling with and without replacement using           */
/*            direct access (point= option)                         */
/*                                                                  */
/*  Created by:  Kimball Lewis, Pharmetrics, Inc.                   */ 
/*               klewis@pharmetrics.com, kimball_lewis@yahoo.com    */ 
/*                                                                  */
/*  Notes:  BASUG quarterly meeting Coder's Corner (6/25/2002)      */
/*                                                                  */
/********************************************************************/
/********************************************************************/


%let seed = 456;


/** ---------- Sample data WITH replacement ---------------------- **/

data mydata.sampleWith ( drop = sampleSize i );

    sampleSize = 10;

    do i = 1 to sampleSize;
   
        sampleRecordNumber = ceil( ranuni(&seed.)*allDataTotalObs );
    
        set mydata.allData 
            point=sampleRecordNumber  
            nobs=allDataTotalObs
         ;

        output mydata.sampleWith;

    end;
    stop;
run;



/** ---------- Sample data WITHOUT replacement ------------------- **/

data mydata.sampleWithout ( drop = sampleSize obsLeft );

    sampleSize = 10;
    obsLeft = allDataTotalObs;

    do while ( sampleSize > 0 );

        sampleRecordNumber + 1;

        if ranuni(&seed.) < sampleSize / obsleft then
            do;
                set mydata.allData 
                    point=sampleRecordNumber  
                    nobs=allDataTotalObs
                 ;
                output mydata.sampleWithout;
                sampleSize = sampleSize - 1;
            end;

        obsLeft = obsLeft - 1;

    end;
    stop;
run; 
