gzjb 发表于 2010-2-26 03:59 
/**************************************************************************************************
****   Here Just show a complicated way to implement it. If anyone knows a simple way *****
*** Please let me know.  Thanks a lot                                      **********************************/;
***********************  SAS Code **********************;
DATA test;
input Week $ Day Price;
CARDS;
111 1 1
111 1 2
112 1 3
112 1 4
111 2 5
111 2 6
112 2 7
112 2 8
;
proc sort data=test;
by day  week;
run;
proc means data=test;
  by Day Week;
  var price;
  output out=meanout(keep= Week Day priceMean) MEAN(price)=priceMean;
run;
data _NULL_;
 set meanout;
 File 'C:\ProjStudy\gzjb\interchange.txt';
 put Day Week PriceMean;
run;
data meanP;
  infile 'C:\ProjStudy\gzjb\interchange.txt';
  input Day Week1$ PriceMean1@;
  input Day Week2$ PriceMean2;
  run;
 
  data meanP1 (drop=tmPrice);
    set meanP;
        tmPrice=PriceMean1;
        PriceMean1=PriceMean2;
    PriceMean2=tmPrice;
        run;
        data meanPweek1(keep=Day Week1 PriceMean1)
        meanPweek2(keep=Day Week2 PriceMean2);
          set MeanP1;
        run;
        data mergePweek;
            merge meanPweek1(rename=( Week1=Week PriceMean1=MeanP)) meanPweek2(rename=( Week2=Week PriceMean2=MeanP));
            by Day Week;
    run; 
 
data lastData;
  merge test mergePweek;
  by Day Week;
  run;
proc print noobs; run;
******************************************
SAS Output:
****************************************
                               
                                Week    Day    Price      MeanP
                                    111      1       1       3.5
                                    111      1       2       3.5
                                    112      1       3       1.5
                                    112      1       4       1.5
                                    111      2       5       7.5
                                    111      2       6       7.5
                                    112      2       7       5.5
                                    112      2       8       5.5
It can be much simplified as,
DATA test;
input Week $ Day Price;
CARDS;
111 1 1
111 1 2
112 1 3
112 1 4
111 2 5
111 2 6
112 2 7
112 2 8
;
proc sql;
  select *, mean(price)    as avgprice
  from test
  group by 1,2
  order by 2,1
  ;
  quit;