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)。我认为这对我来说是第二个。