使用do循环在SAS中创建新变量

使用do循环在SAS中创建新变量,sas,sas-macro,do-loops,Sas,Sas Macro,Do Loops,我有一个SAS计划,有一个基准年的数据和五个预测年。所有预测年都有相同的计算,但只使用上一年的数据作为计算的基准年。我希望避免复制数据5次,而只是更改变量名的后缀。如果只有一个预测年,并且有一个do循环或一个数组来更改变量名的后缀,那就太好了。以下是我根据您的输入更新的代码: *Start macro loop - takes two parameters, the first year of the dataset to be created and the last year; %macro

我有一个SAS计划,有一个基准年的数据和五个预测年。所有预测年都有相同的计算,但只使用上一年的数据作为计算的基准年。我希望避免复制数据5次,而只是更改变量名的后缀。如果只有一个预测年,并且有一个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         

如果需要不同的数据集,则需要宏循环。如果需要单个数据集,请

*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);   

如果需要不同的数据集,则需要宏循环。如果需要单个数据集,请

*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);   

非常感谢你的帮助!我几乎可以让它工作了,但我一直在思考如何称呼maco。我在哪里放置:%loop(年份开始=15,年份结束=20);我已经在%宏循环区域和代码末尾尝试过了。在宏循环之后,我仍然没有得到任何输出。我不知道我是否做错了什么。下面是我的代码的结尾:Run;%结束*do循环结束;%修补*宏结束;%循环(开始年份=18,结束年份=20);您正在从%macro循环()运行代码。。;起点?我根据您的输入更新了代码。我对宏非常陌生。我真的很感谢你的帮助。我的%loop语句无效或使用顺序不正确仍然会给我带来错误非常感谢您的帮助!我几乎可以让它工作了,但我一直在思考如何称呼maco。我在哪里放置:%loop(年份开始=15,年份结束=20);我已经在%宏循环区域和代码末尾尝试过了。在宏循环之后,我仍然没有得到任何输出。我不知道我是否做错了什么。下面是我的代码的结尾:Run;%结束*do循环结束;%修补*宏结束;%循环(开始年份=18,结束年份=20);您正在从%macro循环()运行代码。。;起点?我根据您的输入更新了代码。我对宏非常陌生。我真的很感谢你的帮助。我的%loop语句无效或使用顺序不正确,这仍然会给我带来错误