在宏sas中做一个do循环

时间:2015-10-08 05:01:36

标签: 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;                                                                                                                              
   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; 

我想创建一种do循环,当countnew为&lt; 10,20,30 ....直到70时删除数据,并为每次迭代时创建一个单独的数据集countnew是&lt; 10,20,等等。

因此,我将获得countnew时不同迭代的最终数据集

这样做的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

为什么不循环执行,十点十分,并将迭代扩展添加到数据集名称中?

** 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将被替换为数据集名称。