options linesize = 80 ;
footnote "~john-c/5421/mediansum.sas &sysdate &systime" ;

data xdata ;

     infile 'x.data' end = eof ;
     input x ;

     if x eq . then delete ;

     endvar = 0 ;
     if eof = 1 then endvar = 1 ;

run ;

proc print data = xdata ;

proc sort data = xdata ; by x ;

data xdata ;
     retain count 0 ;
     set xdata end = endmark ;
     count = count + 1 ;
     endata = 0 ;
     if endmark eq 1 then endata = 1 ;

     if endmark eq 1 then do ;

        call symput('xcount', left(put(count, 3.0))) ;

     end ;

run ;

proc print data = xdata ;

data xdata ;
     set xdata ;
     retain median ;
     ihalf = int(&xcount / 2) ;
     half  = &xcount / 2 ;

     if half = ihalf then do ;

        if count eq half then median = x ;
        if count eq (half + 1) then median = .5 * median + .5 * x ;

     end ;

     if half ne ihalf then do ;

        if count eq ihalf + 1 then median = x ;

     end ;

run ;

proc print data = xdata ;
     var count ihalf half x median ;
title1 "How to compute the median ... use of symput ... count = &xcount" ;



                                 The SAS System                                1


                                                   18:53 Monday, October 2, 2006

                            Obs       x      endvar

                              1    0.1678       0  
                              2    0.0909       0  
                              3    0.2145       0  
                              4    0.7073       0  
                              5    0.8860       0  
                              6    0.4544       0  
                              7    0.3173       0  
                              8    0.0100       0  
                              9    0.9999       0  
                             10    0.2134       0  
                             11    0.3124       0  
                             12    0.4132       0  
                             13    0.4123       0  
                             14    0.4213       0  
                             15    0.4231       0  
                             16    0.4312       0  
                             17    0.4321       0  
                             18    0.5555       0  
                             19    0.8978       0  
                             20    0.9135       1  
 
 
 
 
 
                    ~john-c/5421/mediansum.sas 02OCT06 18:53
                                  The SAS System                                2
                                                   18:53 Monday, October 2, 2006

                   Obs    count       x      endvar    endata

                     1       1     0.0100       0         0  
                     2       2     0.0909       0         0  
                     3       3     0.1678       0         0  
                     4       4     0.2134       0         0  
                     5       5     0.2145       0         0  
                     6       6     0.3124       0         0  
                     7       7     0.3173       0         0  
                     8       8     0.4123       0         0  
                     9       9     0.4132       0         0  
                    10      10     0.4213       0         0  
                    11      11     0.4231       0         0  
                    12      12     0.4312       0         0  
                    13      13     0.4321       0         0  
                    14      14     0.4544       0         0  
                    15      15     0.5555       0         0  
                    16      16     0.7073       0         0  
                    17      17     0.8860       0         0  
                    18      18     0.8978       0         0  
                    19      19     0.9135       1         0  
                    20      20     0.9999       0         1  
 
 
 
                    ~john-c/5421/mediansum.sas 02OCT06 18:53


           How to compute the median ... use of symput ... count = 20           3
                                                   18:53 Monday, October 2, 2006

               Obs    count    ihalf    half       x      median

                 1       1       10      10     0.0100     .    
                 2       2       10      10     0.0909     .    
                 3       3       10      10     0.1678     .    
                 4       4       10      10     0.2134     .    
                 5       5       10      10     0.2145     .    
                 6       6       10      10     0.3124     .    
                 7       7       10      10     0.3173     .    
                 8       8       10      10     0.4123     .    
                 9       9       10      10     0.4132     .    
                10      10       10      10     0.4213    0.4213
                11      11       10      10     0.4231    0.4222
                12      12       10      10     0.4312    0.4222
                13      13       10      10     0.4321    0.4222
                14      14       10      10     0.4544    0.4222
                15      15       10      10     0.5555    0.4222
                16      16       10      10     0.7073    0.4222
                17      17       10      10     0.8860    0.4222
                18      18       10      10     0.8978    0.4222
                19      19       10      10     0.9135    0.4222
                20      20       10      10     0.9999    0.4222
 
 
 
                    ~john-c/5421/mediansum.sas 02OCT06 18:53

~john-c/5421/mediansum.examp  October 2, 2006.