楼主: 常洪洋
4250 14

请教一下,通过retain变量累加,如何设置累加次数 [推广有奖]

  • 0关注
  • 0粉丝

初中生

71%

还不是VIP/贵宾

-

威望
0
论坛币
848 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
207 点
帖子
11
精华
0
在线时间
22 小时
注册时间
2016-12-19
最后登录
2019-7-1

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
QQ截图20170307204429.png
如图,观测每次递减50%,只想递减8次,怎么才能做到
二维码

扫码加我 拉你入群

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

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

关键词:RETAIN RET ETA 如何

沙发
zwnSAS121 发表于 2017-3-7 21:06:34 |只看作者 |坛友微信交流群
data a;
x=100;
run;
data b;
set a;
do i=1 to 8;
x=x/2;
output;
end;
run;

使用道具

藤椅
常洪洋 发表于 2017-3-7 23:07:30 |只看作者 |坛友微信交流群
zwnSAS121 发表于 2017-3-7 21:06
data a;
x=100;
run;
还是实现不了

使用道具

板凳
常洪洋 发表于 2017-3-7 23:09:30 |只看作者 |坛友微信交流群
部分数据集

QQ截图20170307230829.png (23.9 KB)

QQ截图20170307230829.png

使用道具

报纸
常洪洋 发表于 2017-3-7 23:12:54 |只看作者 |坛友微信交流群
常洪洋 发表于 2017-3-7 23:09
部分数据集
我想实现构建一个新变量,对Q_1变量中非0的观测向下衰减,每次衰减50%,衰减8次,按zip分组,组内的衰减值可叠加

使用道具

地板
zwnSAS121 发表于 2017-3-8 09:05:21 |只看作者 |坛友微信交流群
  1. data zip;
  2. input zip$ q_1 q_2 q_3;
  3. cards;
  4. 50003 1 0 0
  5. 50003 0 1 0
  6. 50003 0 1 0
  7. 50003 0 1 0
  8. 50003 0 1 0
  9. 50003 0 0 0
  10. 50003 1 0 0
  11. 50010 0 0.8 4
  12. 50010 0 1.8 0
  13. 50010 0 2.8 0
  14. 50010 0 2 4
  15. 50010 0 3 4
  16. 50010 0 3 6
  17. ;
  18. proc sort data=zip out=b;by zip;run;
  19. data a;
  20. set b;
  21. retain q_1 q_2 q_3;
  22. by zip;
  23. do i=1 to 8;
  24. if q_1 ^= 0 then q_1=q_1/2;
  25. if q_2 ^= 0 then q_2=q_2/2;
  26. if q_3 ^= 0 then q_3=q_3/2;
  27. output;
  28. end;
  29. drop i;
  30. run;
复制代码

使用道具

7
renjingli2011 发表于 2017-3-8 10:32:41 |只看作者 |坛友微信交流群
data b;
   length x 8.;
   retain x 100;
   do i =1 to 8;
     if i =1 then x = 100;
         else x = x/2;
         output;
   end;
  run;
试试这个思路能得到你要的结果吗?

使用道具

8
常洪洋 发表于 2017-3-8 14:08:42 |只看作者 |坛友微信交流群
zwnSAS121 发表于 2017-3-8 09:05
这样会使观测增加,要在不改变观测数的情况下实现,如果在迭代8次的过程中遇到新的数值,应该相加

使用道具

9
lovexialulu 发表于 2017-3-9 15:54:08 |只看作者 |坛友微信交流群
这种应该是你要的吧,组内累积衰减50%
  1. data zip;
  2. input zip$ q_1 q_2 q_3;
  3. cards;
  4. 50003 1 0 0
  5. 50003 0 1 0
  6. 50003 0 1 0
  7. 50003 1 1 0
  8. 50003 0 1 0
  9. 50003 0 0 0
  10. 50003 1 0 0
  11. 50003 1 1 0
  12. 50003 0 1 0
  13. 50003 0 0 0
  14. 50003 1 0 0
  15. 50003 0 1 0
  16. 50003 0 0 0
  17. 50003 1 0 0
  18. 50010 0 0.8 4
  19. 50010 1 1.8 0
  20. 50010 0 2.8 0
  21. 50010 1 2 4
  22. 50010 0 3 4
  23. 50010 1 3 6
  24. 50010 0 2.8 0
  25. 50010 1 2 4
  26. 50010 0 3 4
  27. 50010 1 3 6
  28. 50010 0 2.8 0
  29. 50010 1 2 4
  30. 50010 0 3 4
  31. 50010 1 3 6
  32. 50010 0 2.8 0
  33. ;
  34. proc sort data=zip out=b;by zip;run;
  35. data a;
  36. set b;
  37. retain num;
  38. by zip;
  39. if q_1 ne 0  then  num+1;
  40. if first.zip then do;
  41.    if q_1 ne 0 then num=1;else
  42.    num=0;
  43. end;
  44. xx=1/(2**num);

  45. need=xx*q_1;
  46. run;
复制代码

need.PNG (36.27 KB)

need.PNG

使用道具

10
常洪洋 发表于 2017-3-10 02:04:57 |只看作者 |坛友微信交流群
IMG_20170310_020315.jpg
想得到这样的效果

使用道具

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

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

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

GMT+8, 2024-4-27 07:45