楼主: peijiamei
12944 8

[原创博文] 在sas中计算累积相乘?怎么做呀? [推广有奖]

已卖:299份资源

学科带头人

75%

还不是VIP/贵宾

-

威望
3
论坛币
26157 个
通用积分
12.7133
学术水平
217 点
热心指数
343 点
信用等级
210 点
经验
75401 点
帖子
1099
精华
1
在线时间
2016 小时
注册时间
2007-11-15
最后登录
2016-3-21

楼主
peijiamei 发表于 2010-7-27 14:54:35 |AI写论文
10论坛币
code
dateintr
12001010200.1
12001010310.2
12001010520.1
12001010630.2
22001010200.3
22001010310.2
22001010420.1
22001010530.1
22001010640.2
22001010750.2
22001010860.1
22001010970.1



code
dateintrtr
12001010200.10.1
12001010310.20.02
12001010520.10.002
12001010630.20.0004
22001010200.30.3
22001010310.20.06
22001010420.10.006
22001010530.10.0006
22001010640.20.00012
22001010750.20.000024

要求是根据第一个计算出第二个表格中的tr
其中tr是各个code中r的累积相乘


向高手致敬!
关键词:怎么做 code date COD ODE

本帖被以下文库推荐

沙发
soporaeternus 发表于 2010-7-27 14:54:36
  1. data b;
  2.         retain code date int r tr 1;
  3.         set a;
  4.         by code date;
  5.         if first.code then tr=1;
  6.         tr=tr*r;
  7. run;
复制代码
已有 1 人评分论坛币 热心指数 收起 理由
peijiamei + 20 + 1 tr=1这里是不是应该改为tr=r?

总评分: 论坛币 + 20  热心指数 + 1   查看全部评分

Let them be hard, but never unjust

藤椅
soporaeternus 发表于 2010-7-27 15:28:25
tr=r的话,下面那步tr=tr*r会使得第一条自我累乘一次
即整个累乘序列都多乘第一条一次
Let them be hard, but never unjust

板凳
hongxx 发表于 2010-7-27 17:35:26
为什么要retain那么多变量?
在金融里计算股票的累计非正常收益率CAR,大都是这个过程。
proc sort data=a;
      by code date;
run;
data b;
        set a;
        retain  tr ;
        if first.code then tr=r;
        else tr=tr*r;
        by code;
run;

报纸
rockfido 在职认证  发表于 2010-7-27 20:48:42
4# hongxx

想问个类似的问题,如果R是字符型的, TR也是字符型的(长度足够),
然后我TR = TR*R 那里变成 TR = TR||’,‘||R,为什么出来的总是不是我预期的呢?

我预期的是第一个是TR = ’0.1‘,第二个TR = ’0.1,0.2‘,可是我现在出来的结果,第一个,第二个都是0.1,请问这个是什么原因呢?

proc sort data=a;
      by code date;
run;
data b;
length tr $ 50;
        set a;
        retain  tr ;
        if first.code then tr=r;
        else tr=tr||‘,‘||r;
        by code;
run;

另外,还有一个问题,这个BY CODE,可以放在SET A之后么?

地板
hongxx 发表于 2010-7-27 21:36:30
else tr=cats( tr, ',',r)

你想串在一起,总得把空格去掉吧。

7
hongxx 发表于 2010-7-27 21:43:33
一般的by 语句都是放在最first.variable或者last.variable之后吧,这样好读一些。一般SAS的编程习惯是这样。
而且by 只能放set 之后。

8
rockfido 在职认证  发表于 2010-7-28 01:56:31
6# hongxx

知道了。。。应该是TR = STRIP(TR)||STRIP(R)。。。。

否则长度有问题了。。。。

9
rockfido 在职认证  发表于 2010-7-28 01:57:08
7# hongxx
THANKS A LOT!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 23:06