楼主: wdxmahone
8043 12

[原创博文] sas 分组连乘 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

40%

还不是VIP/贵宾

-

威望
0
论坛币
12568 个
通用积分
0
学术水平
2 点
热心指数
3 点
信用等级
2 点
经验
3521 点
帖子
122
精华
0
在线时间
155 小时
注册时间
2010-1-11
最后登录
2022-9-4

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
sas如何做到分组连乘啊?希望各位大师赐教。。。谢谢哈!

data a; imput x1 x2; cards;
1 2
2 2
3 2
4 3
5 3
6 3
;
run;

我想得到
x2   x3
2     6
3   120
也就是按照x2分组,将x1连乘。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:分组连乘 cards card Data put 如何

回帖推荐

soporaeternus2 发表于4楼  查看完整内容

......以此类推了,SQL应该也能写,一下子想不起来了......

本帖被以下文库推荐

  1. data a; input x1 x2; cards;
  2. 1 2
  3. 2 2
  4. 3 2
  5. 4 3
  6. 5 3
  7. 6 3
  8. ;
  9. run;

  10. proc sort data=a out=b;by x2;run;quit;

  11. data c;
  12.         retain x2 x3 1;
  13.         set b;
  14.         by x2;
  15.         if first.x2 then x3=1;
  16.         x3=x3*x1;
  17.         if last.x2 then output;
  18.         keep x2 x3;
  19. run;

  20. proc print;run;quit;
复制代码
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

藤椅
wdxmahone 发表于 2010-2-2 15:48:07 |只看作者 |坛友微信交流群
2# soporaeternus2

谢谢哈,如果按照两个变量分组呢!

data a; imput x1 x2 x3; cards;
1 2 1
2 2 1
3 2 2
4 3 1
5 3 2
6 3 2
;
run;

我想得到
x2   x3    x4
2     1     2
2     2     3
3     1     4
3     2     30
也就是按照x2和x3分组,将x1连乘。。

使用道具

  1. data a; input x1 x2 x3; cards;
  2. 1 2 1
  3. 2 2 1
  4. 3 2 2
  5. 4 3 1
  6. 5 3 2
  7. 6 3 2
  8. ;
  9. run;



  10. proc sort data=a out=b;by x2 x3;run;quit;

  11. data c;
  12.         retain x2 x3 x4 1;
  13.         set b;
  14.         by x2 x3;
  15.         if first.x3 then x4=1;
  16.         x4=x4*x1;
  17.         if last.x3 then output;
  18.         keep x2 x3 x4;
  19. run;

  20. proc print;run;quit;
复制代码
......以此类推了,SQL应该也能写,一下子想不起来了......
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

报纸
wdxmahone 发表于 2010-2-2 16:17:21 |只看作者 |坛友微信交流群
4# soporaeternus2

这已经很好了,谢谢哈。。。对sas的编程还是不怎么熟练啊!

使用道具

地板
jingju11 发表于 2010-2-2 22:36:47 |只看作者 |坛友微信交流群
5# wdxmahone
SQL应该也能......
For the 2nd example:

  1. proc sql;
  2.     select x2, x3,
  3.          case
  4.       when min(abs(x1)) > 0 then (-1)**sum((x1<0))*exp(sum(log(abs(x1))))
  5.            else 0
  6.           end as product
  7.       from A
  8.       group by x2, x3;
  9. quit;
复制代码
The basic idea is that the log product is equal to the sum of log values when the values are all positive, thus you need to consider 1. the sign 2. if 0.
One of the pros of using SQL is its much more understandable syntax here.

使用道具

7
xuwei2007 发表于 2010-2-3 09:00:44 |只看作者 |坛友微信交流群
  1. data a; input x1 x2; cards;
  2. 1 2
  3. 2 2
  4. 3 2
  5. 4 3
  6. 5 3
  7. 6 3
  8. ;
  9. run;

  10. proc sort data=a out=b;
  11. by x2;
  12. run;

  13. proc transpose data=b out=c;
  14. var x1;
  15. by x2;
  16. run;

  17. data d (keep=x2 x3);
  18. set c;
  19. x3=col1*col2*col3;
  20. run;
复制代码

使用道具

8
soporaeternus2 发表于 2010-2-3 09:32:41 |只看作者 |坛友微信交流群
6# jingju11
恩,就是这个意思

  1. log(abs(x1)
复制代码

改成

  1. log(case when abs(x1)>0 then abs(x1) else 1 end)
复制代码

就没有那个log函数参数无效的NOTE了......

学习了,好强大,谢谢

使用道具

9
醉_清风 发表于 2010-2-3 16:10:38 |只看作者 |坛友微信交流群
6# jingju11

学习了 太牛了
从来不需要想起 永远也不会忘记

使用道具

10
wdxmahone 发表于 2010-2-4 13:37:50 |只看作者 |坛友微信交流群
6# jingju11

这种转换太强大了。。。这是一个牛人辈出的年代。。。

使用道具

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

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

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

GMT+8, 2024-5-14 02:15