SAS中文论坛

标题: 请教大家一个问题 [打印本页]

作者: 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
......

现在需要编制这样一个的一个程序:计算每一个不同的日期,所有投资者当天相同trade_dir方向的所有vol;
即:创建一张新表,表中格式如下

例如:date             B     S      

      20070102   300   400

  20070103    0       100

请大家给予帮忙
谢谢.
作者: 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

A001001 20070102 100 100
作者: shiyiming    时间: 2007-12-26 21:16
标题: Re: 请教大家一个问题
proc sort data=a;
by acct_id date;
run;

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]




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