2015-09-25 321 views
1

我有一個SAS程序,它有一個基準年和五個預測年。所有的預測年份都有相同的計算結果,但只是使用上一年的數據作爲計算基準年。我想避免複製數據5次,只是改變我的變量名稱的後綴。只有一個預測年份並且有一個do循環或一個數組來更改變量名稱的後綴會很好。這是我更新的代碼根據您輸入的:在SAS中使用do循環創建新變量

*Start macro loop - takes two parameters, the first year of the dataset to be created and the last year; 
%macro loop(year_start, year_end); 

    *loop over years; 

    %do year=&year_start %to &year_end; 
    *create macro variable for previous years; 
    %let prev_year=%eval(&year_start-1); 

DATA SchoolAidFY&year_start.; 
Set work.forecastinputs; 

* COST PER PUPIL AMOUNTS;      
L201_FY&start_year.= L203_FY&prev_year.;        
L202_FY&start_year.=  Round(SCPP*SPG_FY&start_year.,1);   
L203_FY&start_year.=  Sum(L201_FY&start_year.,L202_FY&start_year.);     
L204_FY&start_year.= L206_FY&prev_year.;      
L205_FY&start_year.=  Round(TS_SCPP*SPG_FY&start_year.,0.01);  
L206_FY&start_year.=  Sum(L204_FY&start_year.,L205_FY&start_year.);    
L207_FY&start_year.= L209_FY&prev_year.;      
L208_FY&start_year.=  Round(PD_SCPP*SPG_FY&start_year.,0.01);  
L209_FY&start_year.=  Sum(L207_FY&start_year.,L208_FY&start_year.);   
L210_FY&start_year.= L212_FY&prev_year.;      
L211_FY&start_year.=  Round(EI_SCPP*SPG_FY&start_year.,0.01);  
L212_FY&start_year.=  Sum(L210_FY&start_year.,L211_FY&start_year.);    
L213_FY&start_year.= L215_FY&prev_year.;      
L214_FY&start_year.=  Round(TL_SCPP*SPG_FY&start_year.,0.01);  
L215_FY&start_year.=  Sum(L213_FY&start_year.,L214_FY&start_year.);     

Run; 


    %end; 
    *end of do loop; 

    %mend; 
    *end of macro; 

%loop(year_start=17, year_end=20); 

這裏是日誌:

2               The SAS System       11:35 Monday, September 28, 2015 

58   L215_FY&start_year.=  Sum(L213_FY&start_year.,L214_FY&start_year.);     
59   
60   Run; 
61   
62   
63   %end; 
64   *end of do loop; 
65   
66   %mend; 
67   *end of macro; 
68   
69   %loop(year_start=17, year_end=20); 
180: LINE and COLUMN cannot be determined. 
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred. 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
180: LINE and COLUMN cannot be determined. 
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred. 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
180: LINE and COLUMN cannot be determined. 
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred. 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
             _______ 
             180 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
                         _______ 
                         180 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
                _______ 
                180 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
      _______ 
      180 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

3               The SAS System       11:35 Monday, September 28, 2015 

WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69    L208_FY&start_year.= Round(PD_SCPP*SPG_FY&start_year.,0.01); L209_FY&start_year.= 
        _______               _______ 
_______                                
        180                180 
180                     
69  ! Sum(L207_FY&start_year.,L208_FY&start_year.); L210_FY&start_year.= L212_FY&prev_year.;  L211_FY&start_year.= 
69  ! Round(EI_SCPP*SPG_FY&start_year.,0.01); 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69    L208_FY&start_year.= Round(PD_SCPP*SPG_FY&start_year.,0.01); L209_FY&start_year.= 
69  ! Sum(L207_FY&start_year.,L208_FY&start_year.); L210_FY&start_year.= L212_FY&prev_year.;  L211_FY&start_year.= 
                              _______ 
                              180 
69  ! Round(EI_SCPP*SPG_FY&start_year.,0.01); 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69   L212_FY&start_year.= Sum(L210_FY&start_year.,L211_FY&start_year.);  L213_FY&start_year.= L215_FY&prev_year.; 
       _______                 _______ 
       180                  180 
69  ! L214_FY&start_year.= Round(TL_SCPP*SPG_FY&start_year.,0.01); L215_FY&start_year.= 
69  ! Sum(L213_FY&start_year.,L214_FY&start_year.); 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69   L212_FY&start_year.= Sum(L210_FY&start_year.,L211_FY&start_year.);  L213_FY&start_year.= L215_FY&prev_year.; 
69  ! L214_FY&start_year.= Round(TL_SCPP*SPG_FY&start_year.,0.01); L215_FY&start_year.= 
      _______ 
      180 
69  ! Sum(L213_FY&start_year.,L214_FY&start_year.); 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

NOTE: Line generated by the invoked macro "LOOP". 
69   L212_FY&start_year.= Sum(L210_FY&start_year.,L211_FY&start_year.);  L213_FY&start_year.= L215_FY&prev_year.; 
69  ! L214_FY&start_year.= Round(TL_SCPP*SPG_FY&start_year.,0.01); L215_FY&start_year.= 
                      _______ 
                      180 
69  ! Sum(L213_FY&start_year.,L214_FY&start_year.); 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
4               The SAS System       11:35 Monday, September 28, 2015 

WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 

NOTE: The SAS System stopped processing this step because of errors. 
WARNING: The data set WORK.SCHOOLAIDFY17 may be incomplete. When this step was stopped there were 0 observations and 1197 
     variables. 
WARNING: Data set WORK.SCHOOLAIDFY17 was not replaced because this step was stopped. 
NOTE: DATA statement used (Total process time): 
     real time   0.01 seconds 
     cpu time   0.01 seconds 


180: LINE and COLUMN cannot be determined. 
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred. 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
180: LINE and COLUMN cannot be determined. 
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred. 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
180: LINE and COLUMN cannot be determined. 
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred. 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
             _______ 
             180 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
                         _______ 
                         180 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
                _______ 
                180 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
      _______ 
      180 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
5               The SAS System       11:35 Monday, September 28, 2015 


WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69    L208_FY&start_year.= Round(PD_SCPP*SPG_FY&start_year.,0.01); L209_FY&start_year.= 
        _______               _______ 
_______                                
        180                180 
180                     
69  ! Sum(L207_FY&start_year.,L208_FY&start_year.); L210_FY&start_year.= L212_FY&prev_year.;  L211_FY&start_year.= 
69  ! Round(EI_SCPP*SPG_FY&start_year.,0.01); 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69    L208_FY&start_year.= Round(PD_SCPP*SPG_FY&start_year.,0.01); L209_FY&start_year.= 
69  ! Sum(L207_FY&start_year.,L208_FY&start_year.); L210_FY&start_year.= L212_FY&prev_year.;  L211_FY&start_year.= 
                              _______ 
                              180 
69  ! Round(EI_SCPP*SPG_FY&start_year.,0.01); 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69   L212_FY&start_year.= Sum(L210_FY&start_year.,L211_FY&start_year.);  L213_FY&start_year.= L215_FY&prev_year.; 
       _______                 _______ 
       180                  180 
69  ! L214_FY&start_year.= Round(TL_SCPP*SPG_FY&start_year.,0.01); L215_FY&start_year.= 
69  ! Sum(L213_FY&start_year.,L214_FY&start_year.); 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69   L212_FY&start_year.= Sum(L210_FY&start_year.,L211_FY&start_year.);  L213_FY&start_year.= L215_FY&prev_year.; 
69  ! L214_FY&start_year.= Round(TL_SCPP*SPG_FY&start_year.,0.01); L215_FY&start_year.= 
      _______ 
      180 
69  ! Sum(L213_FY&start_year.,L214_FY&start_year.); 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

NOTE: Line generated by the invoked macro "LOOP". 
69   L212_FY&start_year.= Sum(L210_FY&start_year.,L211_FY&start_year.);  L213_FY&start_year.= L215_FY&prev_year.; 
69  ! L214_FY&start_year.= Round(TL_SCPP*SPG_FY&start_year.,0.01); L215_FY&start_year.= 
                      _______ 
                      180 
69  ! Sum(L213_FY&start_year.,L214_FY&start_year.); 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

WARNING: Apparent symbolic reference START_YEAR not resolved. 
6               The SAS System       11:35 Monday, September 28, 2015 

WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 

NOTE: The SAS System stopped processing this step because of errors. 
WARNING: The data set WORK.SCHOOLAIDFY17 may be incomplete. When this step was stopped there were 0 observations and 1197 
     variables. 
WARNING: Data set WORK.SCHOOLAIDFY17 was not replaced because this step was stopped. 
NOTE: DATA statement used (Total process time): 
     real time   0.01 seconds 
     cpu time   0.01 seconds 


180: LINE and COLUMN cannot be determined. 
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred. 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
180: LINE and COLUMN cannot be determined. 
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred. 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
180: LINE and COLUMN cannot be determined. 
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred. 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
             _______ 
             180 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
                         _______ 
                         180 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
                _______ 
                180 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
ERROR 180-322: Statement is not valid or it is used out of proper order. 

NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
      _______ 
      180 

NOTE: The SAS System stopped processing this step because of errors. 
WARNING: The data set WORK.SCHOOLAIDFY17 may be incomplete. When this step was stopped there were 0 observations and 1197 
     variables. 
WARNING: Data set WORK.SCHOOLAIDFY17 was not replaced because this step was stopped. 
NOTE: DATA statement used (Total process time): 
     real time   0.01 seconds 
     cpu time   0.01 seconds 


180: LINE and COLUMN cannot be determined. 
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred. 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
180: LINE and COLUMN cannot be determined. 
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred. 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
180: LINE and COLUMN cannot be determined. 
NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred. 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
             _______ 
             180 
69  ! Round(TS_SCPP*SPG_FY&start_year.,0.01); L206_FY&start_year.= Sum(L204_FY&start_year.,L205_FY&start_year.); 
69  ! L207_FY&start_year.= L209_FY&prev_year.; 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
WARNING: Apparent symbolic reference START_YEAR not resolved. 
NOTE: Line generated by the invoked macro "LOOP". 
69   ,L202_FY&start_year.);  L204_FY&start_year.= L206_FY&prev_year.;  L205_FY&start_year.= 
                         _______ 


NOTE: The SAS System stopped processing this step because of errors. 
WARNING: The data set WORK.SCHOOLAIDFY17 may be incomplete. When this step was stopped there were 0 observations and 1197 
     variables. 
WARNING: Data set WORK.SCHOOLAIDFY17 was not replaced because this step was stopped. 
NOTE: DATA statement used (Total process time): 
     real time   0.01 seconds 
     cpu time   0.01 seconds 

70   
71   
72   
73   
74   GOPTIONS NOACCESSIBLE; 
75   %LET _CLIENTTASKLABEL=; 
76   %LET _CLIENTPROJECTPATH=; 
77   %LET _CLIENTPROJECTNAME=; 
78   %LET _SASPROGRAMFILE=; 
79   
80   ;*';*";*/;quit;run; 
81   ODS _ALL_ CLOSE; 
82   
83   
84   QUIT; RUN; 
85   

回答

0

,如果你想不同的數據集,你需要一個宏循環。如果你想有一個單一的數據集,你

*Start macro loop - takes two parameters, the first year of the dataset to be created and the last year; 
options mprint symbolgen; 
%macro loop(year_start, year_end); 
    *loop over years; 
    %do year=&year_start %to &year_end; 

    *create macro variable for previous years; 
    %let prev_year=%eval(&year_start-1); 

    DATA SchoolAid_FY&year_start.; 
    Set work.SchoolAid_FY&prev_year.; 

    * COST PER PUPIL AMOUNTS;      
    L201_FY&start_year.= L203_FY&prev_year.;         
    L202_FY&start_year.= Round(SCPP*SPG_FY&prev_year.,1);   
    L203_FY&start_year.= Sum(L201_FY&prev_year.,L202_FY&prev_year.); 

    *Rest of your code; 

    Run; 
    %end; 
    *end of do loop; 

    %mend; 
    *end of macro; 

然後,你必須調用宏,因此,例如,如果你想從15到20使用year_start = 15,year_end = 20。

%loop(year_start=15, year_end=20); 
+0

非常感謝您的幫助!我幾乎有這個工作,但我堅持我怎麼稱呼maco。我在哪裏放:%循環(year_start = 15,year_end = 20);我已經在%宏循環區域和代碼的末尾嘗試過了。 – user3353530

+0

宏後的任何地方 – Reeza

+0

我仍然沒有得到任何產出。我想知道我是否在做其他的錯誤。這是我的代碼的結束:運行; %end; *循環結束; %修復; *宏結束; %loop(year_start = 18,year_end = 20); – user3353530