SAS中文论坛

标题: 请教macro里do loop的一个问题 [打印本页]

作者: shiyiming    时间: 2011-6-19 06:18
标题: 请教macro里do loop的一个问题
我想分别得到data a里有哪些个team出现记录超出0个/5个/10个/12个/15个/20个的summary.
比如超出0个时,所有的team都会出现;
比如超出5个时,d/e就消失了,team总数也就会少2个;
...
下面的code无法运行,问题有2个,一是,stop不能出现在这个code里;二是,do loop少了'to',要求出现do i=  to的结构,但我以前用过do x= 1 3 4 100;end;stop;类似的语句(data step).
请教一下,我的code如何改,谢谢!!!
data a;
input team $ x @@;
cards;
a 1 a 1 a 3 a 4 a 5 a a 2 a 2 a 2 a 4 a 7 a 10 a 30 a 49 a 21 a 1 a 3 a 2
a 2 a 2 a 2 a 4 a 7 a 10 a 30 a 49 a 21 a 37 a 3 a 4 a 0 a 1 a 3 a 12 a 32
a 3 a 2 a 2 a 2 a 4 a 7 a 10 a 30 a 49 a 21 a 37 a3 a 4 a 4 a 11 a 22 a 90
b 1 b 2 b 3 b 4 b 6 b 7 b 3 b 20 b 4 b 58 b 3 b 9 b 3 b 2 b 2 b 2 b 3 b 5 b 6
b 2 b 1 b 2 b 3 b 4 b 6 b 7 b 3 b 20 b 4 b 58 b 3 b 9 b 3 b 2 b 2 b 2 b 3 b 5 b 6
c 10 c 1 c 4 c 21 c 5 c 7  
d 20
e 1 e 3
f 200 f 1 f 4 f 6 f 7 f 2...
.
.
.
;
run;
%macro count;
%do i=0 5 10 12 15 20;
proc sql;
creeate table a_&i. as   select distinct  count(distinct team) as count
     from (select *,count(*) as cnt from a   group by team having cnt>=&i.)
;
quit;
%end;
%stop;
%mend;
%count
作者: shiyiming    时间: 2011-6-20 10:02
标题: Re: 请教macro里do loop的一个问题
1.没见过%stop的语句
2.do loop的语句,你是说在用到point的时候用的stop吧?
作者: shiyiming    时间: 2011-6-20 12:23
标题: Re: 请教macro里do loop的一个问题
是的,stop应该去掉.
但%do 语句改如何改呢? 很显然这里不能用do ... to..格式.
作者: shiyiming    时间: 2011-6-20 13:18
标题: Re: 请教macro里do loop的一个问题
一般不写成do i=1 3 5这样
而是写成
%let var=%str(0 5 10 12 15 20);
%let i=1;
%do %while(%scan(&var,&i,%str( )) ne ) ;
%put i=%scan(&var,&i,%str( ));
%let i=%eval(&i+1);
%end;




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2