楼主: peijiamei
2671 9

求sql和data步程序,每程序50币! [推广有奖]

学科带头人

76%

还不是VIP/贵宾

-

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

50论坛币
code
dater
110.1
110.2
120.3
120.4
21-0.5
210.5
220.6
220.4

求由表格1生成表格2的程序!

r_sumr_meanr累乘

分别是累计相加、取均值、累计相乘!
求sql和data步程序,每个程序50币!

向高手致敬先!

code
dater_sumr_meanr累乘
110.30.150.02
120.70.350.12
2100-0.25
2210.50.24

最佳答案

hopewell 查看完整内容

SQL是跟soporaeternus学的,不知对不对
关键词:data步 Data sql date code 程序 Data sql

本帖被以下文库推荐

我的微博:http://t.sina.com.cn/1087192374
欢迎互相加关注!
沙发
hopewell 发表于 2010-9-28 13:51:32 |只看作者 |坛友微信交流群
SQL是跟soporaeternus学的,不知对不对
  1. data raw(index=(code_date=(code date)));
  2.     input code date r;
  3. datalines;
  4. 1 1 0.1
  5. 1 1 0.2
  6. 1 2 0.3
  7. 1 2 0.4
  8. 2 1 -0.5
  9. 2 1 0.5
  10. 2 2 0.6
  11. 2 2 0.4
  12. ;
  13. data out1(drop=r);
  14.     length code date r_sum r_mean rr 8.;
  15.     rr=1;
  16.     do _n_=1 by 1 until(last.date);
  17.         set raw;
  18.         by code date;
  19.         r_sum=sum(r_sum,r);
  20.         rr=r*rr;
  21.     end;
  22.     r_mean=r_sum/_n_;
  23. run;
  24. proc sql;
  25.     create table out2 as
  26.         select code, date, sum(r) as r_sum, mean(r) as r_mean,
  27.                min(sign(r))*exp(sum(log(abs(r)))) as rr
  28.             from raw
  29.             group by code, date;
  30. quit;
复制代码

使用道具

藤椅
crackman 发表于 2010-9-28 14:23:34 |只看作者 |坛友微信交流群
data crackman;
input code date r@;
datalines;
1 1 0.1
1 1 0.2
1 2 0.3
1 2 0.4
2 1 -0.5
2 1 0.5
2 2 0.6
2 2 0.4
;
run;
proc sql;
create table crackman as
select code,date,r ,sum(r) as r_sum,mean(r) as r_mean from crackman
group by 1 ,2;
quit;
data crackman;
set crackman;
codedate=compress(cat(code,date));
run;
data crackman;
set crackman;
by codedate notsorted;
retain multi 1;
if first.codedate then multi=r;
else multi=multi*r;
if last.codedate;
drop codedate;
run;
已有 1 人评分学术水平 热心指数 收起 理由
peijiamei + 4 + 3 版主好多币哈。不加了啊

总评分: 学术水平 + 4  热心指数 + 3   查看全部评分

使用道具

板凳
crackman 发表于 2010-9-28 14:26:33 |只看作者 |坛友微信交流群
data crackman;
input code date r@;
datalines;
1 1 0.1
1 1 0.2
1 2 0.3
1 2 0.4
2 1 -0.5
2 1 0.5
2 2 0.6
2 2 0.4
;
run;
proc sql;
create table crackman as
select code,date,r ,sum(r) as r_sum,mean(r) as r_mean from crackman
group by 1 ,2;
quit;
data crackman;
set crackman;
codedate=compress(cat(code,date));
run;
data crackman;
set crackman;
by codedate notsorted;
retain multi 1;
if first.codedate then multi=r;
else multi=multi*r;
if last.codedate;
drop codedate;
run;

使用道具

报纸
crackman 发表于 2010-9-28 14:28:09 |只看作者 |坛友微信交流群
2# hopewell
你老有来抢钱了哦

使用道具

地板
zuohaomiao 发表于 2010-9-28 14:36:00 |只看作者 |坛友微信交流群
data a;
input code date r;
cards;
1 1 0.1
1 1 0.2
1 2 0.3
1 2 0.4
2 1 -0.5
2 1 0.5
2 2 0.6
2 2 0.4
run;
proc sql;
create table b as
select date, code, sum(r) as r_sum, mean(r) as r_mean
from a
group by code, date;
run;
data c;
set a;
if first.date then do;
r_sum=0;
rn=0;
rprod=1;
end;

r_sum+r;
rn+1;
rprod=rprod*r;
retain rprod;

if  last.date;
by code date;
run;
data d;
set c;
r_mean=r_sum/rn;
drop r rn;
run;
已有 1 人评分学术水平 热心指数 收起 理由
peijiamei + 2 + 1 精彩帖子

总评分: 学术水平 + 2  热心指数 + 1   查看全部评分

使用道具

7
peijiamei 发表于 2010-9-28 14:36:42 |只看作者 |坛友微信交流群
min(sign(r))*exp(sum(log(abs(r))))
这个能否实现有点怀疑!
我的微博:http://t.sina.com.cn/1087192374
欢迎互相加关注!

使用道具

8
zuohaomiao 发表于 2010-9-28 14:49:01 |只看作者 |坛友微信交流群
proc sql;
create table b as
select date, code, sum(r) as r_sum, mean(r) as r_mean ,(sum(sign(r))-1)*exp(sum(log(abs(r)))) as r_prod
from a
group by code, date;
run;
已有 1 人评分学术水平 热心指数 收起 理由
peijiamei + 3 + 1 精彩帖子

总评分: 学术水平 + 3  热心指数 + 1   查看全部评分

使用道具

9
soporaeternus 发表于 2010-9-28 15:22:22 |只看作者 |坛友微信交流群
我觉得
  1. (-1)**sum(r<0)*exp(sum(log(abs(r))))*((sum(r=0)>0)-1)*(-1)
复制代码
这个严密点
已有 1 人评分学术水平 热心指数 收起 理由
peijiamei + 3 + 2 精彩帖子

总评分: 学术水平 + 3  热心指数 + 2   查看全部评分

Let them be hard, but never unjust

使用道具

10
soporaeternus 发表于 2010-9-28 15:26:35 |只看作者 |坛友微信交流群
貌似处理正负号和0情况比较麻烦
再完美就是加ifn了,0的时候变成1,靠后面的((sum(r=0)>0)-1)*(-1)来处理为0
这样代码太恶心了
就偷懒利用下sum对缺省值赋0吧
Let them be hard, but never unjust

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 17:02