Macros 在宏sas中执行do循环

Macros 在宏sas中执行do循环,macros,sas,Macros,Sas,我有以下代码: %macro initial (first=, second=, third=, fourth=, final=); data &first; set wtnodup.&first; DATE1 = INPUT(PUT(Date,8.),YYMMDD8.); format DATE1 monyy7.; RUN; proc freq data=&first order= freq;

我有以下代码:

%macro initial (first=, second=, third=, fourth=, final=); 
   data &first;
     set wtnodup.&first;
         DATE1 = INPUT(PUT(Date,8.),YYMMDD8.);
         format DATE1 monyy7.;
 RUN;

proc freq data=&first order= freq;                                                                                                                              
   tables date1*jobboardid / list out=&second (drop = percent rename=   
                                              (Count=CountNew));
 run;

 data &third;
  set &second (firstobs=2);
    if countnew le 49 then delete; 
 run;
proc sort data = &third;
   by jobboardid Date1;    
run;
data &fourth (keep = countnew oldcountnew Date1 rate from till jobboardid 
                                                                    rate);
    set &third;
        by jobboardid Date1;
        format From Till monyy7.;
        from = lag12(Date1);
        oldcountnew = lag12(countnew);

        if lag12(jobboardid) EQ jobboardid and
        INTCK('month', from, Date1) EQ 12 then do;
        till = Date1;
        rate =  ((countnew/oldcountnew)-1)*100;
       output;
    end;
run;
proc sort data = &fourth;
   by Date1 rate;
proc means data=&fourth noprint;
   by Date1;
output out=Result.&final median(rate)=medianRate;
run; 

%mend initial;
%initial (first = Alabama, second = AlabamaOne, third =AlabamaTwo, 
          fourth = AlabamaThree, final=AL_10);
%initial (first = Alaska, second = AlaskaOne, third =AlaskaTwo, 
          fourth = AlaskaThree, final=AK_10);
%initial (first = Arizona, second = ArizonaOne, third =ArizonaTwo, 
          fourth = ArizonaThree, final=AZ);
%initial (first = Arkansas, second = ArkansasOne, third =ArkansasTwo, 
          fourth= ArkansasThree, final=AR_10);
我想做的是,在提出条件的部分:

if countnew < 10 then delete; 
如果countnew<10,则删除;

我想创建一种do循环,当countnew是时,它会删除数据,为什么不进行十乘十的循环,并像这样向数据集名称添加迭代扩展

** Sample dataset;
data try;
do i=1 to 1000;
value=1+ranuni(12345)*100;
output;
end;
drop i;
run;


** Macro iterator:

%macro iter(ds=);

%do i=10 %to 70 %by 10;

    data &ds._&i;
    set &ds;
    if value le &i then delete;
    run;

%end;

%mend;

%iter (ds=try)

您将有7个名为try_10--try_70的数据集,其中try将替换为数据集名称。

所以我将在更大的循环中添加此循环?我有点困惑。您是否理解使用基于迭代器I的值命名和过滤的数据步骤的宏循环的含义?如果是这样,只需在要执行此操作的步骤中将该循环(无宏规范和宏调用)添加到循环中(从%do到%end)。我认为这对我来说是第二个。