楼主: 臻于完美
3043 13

sas 中如何修改前一个观测中的数据;第5个观测满足一定调节,则在4个观测内进行修改? [推广有奖]

  • 2关注
  • 0粉丝

已卖:2份资源

大专生

16%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
169 点
帖子
21
精华
0
在线时间
50 小时
注册时间
2013-9-12
最后登录
2017-5-15

楼主
臻于完美 发表于 2014-2-9 22:21:45 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
sas 中如何修改前一个观测中的数据;第5个观测满足一定调节,则在4个观测内进行修改?

具体的说:
若第(t)组观测中变量 a>10;
则在第(t-1)组观测中,令b=0

该如何实现?
二维码

扫码加我 拉你入群

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

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

关键词:如何实现 如何

回帖推荐

chengys81 发表于11楼  查看完整内容

这个链接用了proc expand,似乎是用了lead function就可以把t + 1 obs弄成t obs,然后就可以让t obs的b=0 if a > 10. [http://www.ats.ucla.edu/stat/sas/faq/tsvars.htm]

chengys81 发表于12楼  查看完整内容

用proc expand可以 proc expand data=sashelp.class out=lead; convert weight=leadWeight / method=none transformout=(lead 1); run; proc print; run;

chengys81 发表于8楼  查看完整内容

你要的是不是lead function?实现和lag相反的情况。 给个链接看看吧,用的是 proc expand, 说不定解决你的问题。 http://www.ats.ucla.edu/stat/sas/faq/tsvars.htm

yongyitian 发表于5楼  查看完整内容

zw612003 发表于2楼  查看完整内容

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000212547.htm if lag1(a) >10 then b=0;

沙发
zw612003 发表于 2014-2-9 22:37:18 来自手机
臻于完美 发表于 2014-2-9 22:21
sas 中如何修改前一个观测中的数据;第5个观测满足一定调节,则在4个观测内进行修改?

具体的说:
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000212547.htm


if lag1(a) >10 then b=0;
已有 1 人评分经验 收起 理由
crackman + 100 鼓励积极发帖讨论

总评分: 经验 + 100   查看全部评分

藤椅
臻于完美 发表于 2014-2-9 23:00:14
zw612003 发表于 2014-2-9 22:37
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000212547.htm
谢谢!!!

板凳
臻于完美 发表于 2014-2-10 09:23:45
zw612003 发表于 2014-2-9 22:37
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000212547.htm
您的回答很好,不过好像和我的问题不太一致额。
我问的是如何根据这一步的判断来修改前一步的值
您给的是如何根据上一步的判断来修改这一步的值

我试了直接写
if b>10 then lag1(a)=10;
结果报错了

报纸
yongyitian 发表于 2014-2-10 10:08:16
  1. data a;
  2.   input id  a b;
  3.   b_old=b;
  4. datalines;
  5. 1 1 1
  6. 2 3 3
  7. 3 5 5
  8. 4 7 7
  9. 5 11 11
  10. 6 2 2
  11. 7 4 4
  12. 8 6 6
  13. 9 8 8
  14. 10 12 12
  15. 11 13 13
  16. 12 14 14
  17. ;run;

  18. data b;
  19.    do p = nobs to 1 by -1;
  20.       set a nobs=nobs point=p;
  21.         laga=lag(a);
  22.         if mod(p, 5) = 4 and laga >10 then b=0;
  23.         output;
  24.    end;
  25.    stop; drop laga;
  26. run;

  27. proc sort data=b out=want;
  28.    by id ;
  29. run;
复制代码

地板
zw612003 发表于 2014-2-13 11:15:32
臻于完美 发表于 2014-2-10 09:23
您的回答很好,不过好像和我的问题不太一致额。
我问的是如何根据这一步的判断来修改前一步的值
您给的 ...
若第(t+1)组观测中变量 a>10;
则在第(t)组观测中,令b=0

你想做这个的话, 应该写if lag(a)>10 then b=0;
lag1() 就是拿t+1的观测值,你再试一试。

7
臻于完美 发表于 2014-2-14 11:24:49
zw612003 发表于 2014-2-13 11:15
若第(t+1)组观测中变量 a>10;
则在第(t)组观测中,令b=0
真的是取t-1
你发给我的链接里讲的挺清楚的。
不管怎么说谢谢了

8
chengys81 发表于 2014-2-18 00:12:44
你要的是不是lead function?实现和lag相反的情况。
给个链接看看吧,用的是 proc expand, 说不定解决你的问题。

http://www.ats.ucla.edu/stat/sas/faq/tsvars.htm

9
chengys81 发表于 2014-2-18 00:45:02
或者data step里面用merge
data b;
   merge a(keep=a b c) a(keep=z firstobs=2);
run;

10
chengys81 发表于 2014-2-18 00:46:10
这个链接用了proc expand,有个lead function,似乎就是做你想要的事
http://www.ats.ucla.edu/stat/sas/faq/tsvars.htm

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

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