Sir : Can you do debug ? THANKS!
How to use one file
(monthly.xlsx) to roll cloumn from 191101 to 201103 fix to 24 variables every moving windows, then rename variable(column) name =K1......K24
---------------------------
H201103 outcomes is only one my outcome ,
I want to be produce many like
H201103 files
that involve from
H199101 H199102 ... to H201103.
--------------------------------------------------------------
Monthly.xlsx
IND 199101 199102...... 201301 201302
sz1_bm1 -3.45 8.05 ..... 5.76 -1.64
sz1_bm2 -1 8.22...... 5.77 -2.35
sz1_bm3 -1.93 8.47...... 5.68 -1.99
sz1_bm4 -1.86 7.7 ....... 6.87 -1.44
sz1_bm5 -3.15 8.36 ..... 10.22 -2.61
sz2_bm1 -1.6 9.68 .... 4.5 1.2
sz2_bm2 -2.89 7.18 .... 5.84 -0.19
------------------------------------------------------
H201103 SAS outcomes:
IND K1 K2 ................... K23 K24
sz1_bm1 0.69 7.47 ................... 5.76 -1.64
sz1_bm2 1.35 7.32 ....................... 5.77 -2.35
sz1_bm3 0.81 7.07 5.68 -1.99
sz1_bm4 2.02 6.44 6.87 -1.44
sz1_bm5 0.8 6.42 10.22 -2.61
sz2_bm1 1.35 7.53 4.5 1.2
sz2_bm2 2.39 6.78 5.84 -0.19
----------------------------------------------------------------------------
* thanks for nomad5's code*
%macro m(v);
%lety=%substr(&v.,1,4);
%letm=%substr(&v.,5,2);
%doi=1 %to 24;
%let mf=%sysfunc(putn(%eval(&m.+&i.-1),z2.));
%if &mf.>24 %then %do;
%let mf=%sysfunc(putn(%eval(&mf.-24),z2.));
%let yf=%eval(&y.+2);
%end;
%else %if &mf.>12 %then %do;
%let mf=%sysfunc(putn(%eval(&mf.-12),z2.));
%let yf=%eval(&y.+1);
%end;
%else %let yf=&y.;
,t1."&yf.&mf."n asK&i.
%end;
%mend m;
/*%m(201103);*/
proc sql noprint;
create table test as
select t1.IND
%m(201103)
from work.monthly t1
;
quit;