标题: 请教大家一个问题 [打印本页] 作者: shiyiming 时间: 2007-12-25 17:01 标题: 请教大家一个问题 现在有sas数据集格式如下:
acct_id date vol trade_dir
A00100 20070102 100 B
A00101 20070102 100 s
A00102 20070102 100 B
A00103 20070103 100 s
A00104 20070102 100 B
A00101 20070102 100 s
A00102 20070104 100 B
A00103 20070102 100 s
A00104 20070105 100 B
A00120 20070102 100 s
A00100 20070106 100 B
......
请大家给予帮忙
谢谢.作者: shiyiming 时间: 2007-12-25 19:12 标题: Re: 请教大家一个问题 用retain也行,不用也行,都可以实现。
data a;
input acct_id $ date vol trade_dir $;
cards;
A00100 20070102 100 B
A00101 20070102 100 S
A00102 20070102 100 B
A00103 20070103 100 S
A00104 20070102 100 B
A00101 20070102 100 S
A00102 20070104 100 B
A00103 20070102 100 S
A00104 20070105 100 B
A00120 20070102 100 S
A00100 20070106 100 B
run;
proc sort data=a;
by date;
run;
data result(keep=date total1 total2 rename=(total1=B total2=S));
set a end=last;
by date;
if first.date then do;
total1=0;
total2=0;
end;
if trade_dir='B' then total1+vol;
else if trade_dir='S' then total2+vol;
if last.date;
run;作者: shiyiming 时间: 2007-12-25 21:46 标题: Re: 请教大家一个问题 proc sort data=a;
by date;
run;
data b(drop=vol trade_dir);
set a(drop=acct_id);
by date;
retain B S;
if first.date then do;
B=0;S=0;
end;
if trade_dir='B' then B+vol;
else if trade_dir='S' then S+vol;
if last.date then output;
run;作者: shiyiming 时间: 2007-12-26 09:11 标题: Re: 请教大家一个问题 那么如果对每一个帐户每天该如何计算那?
即:
acct_id date B S
data b(drop=vol trade_dir);
set a;
by acct_id date;
retain B S;
if first.date then do;
B=0;S=0;
end;
if trade_dir='B' then B+vol;
else if trade_dir='S' then S+vol;
if last.date then output;
run;作者: shiyiming 时间: 2008-1-11 15:03 标题: Re: 请教大家一个问题 infile data...
proc tabulate data=data out=outdata;
class date trade_dir;
var vol;
table date,trade_dir*vol*sum;
run;作者: shiyiming 时间: 2008-1-12 09:38 标题: Re: 请教大家一个问题 [code:38fyrnbk]data a;
input acct_id $ date vol trade_dir $;
cards;
A00100 20070102 100 B
A00101 20070102 100 S
A00102 20070102 100 B
A00103 20070103 100 S
A00104 20070102 100 B
A00101 20070102 100 S
A00102 20070104 100 B
A00103 20070102 100 S
A00104 20070105 100 B
A00120 20070102 100 S
A00100 20070106 100 B
run;
proc sql;
create table b1 as
select distinct acct_id,date,case trade_dir when 'B' then sum(vol) else 0 end as B1,
case trade_dir when 'S' then sum(vol) else 0 end as S1 from a
group by acct_id,date,trade_dir;
create table b as
select acct_id,date,sum(b1) as B ,sum(s1) as S from b1
group by acct_id,date;
quit;[/code:38fyrnbk]