楼主: 月月井
3281 11

[问答] 求一SAS程序 目的是找出三年中重复出现的观测对象且保留其全部变量的观测值 [推广有奖]

  • 0关注
  • 0粉丝

小学生

0%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
45 点
帖子
6
精华
0
在线时间
1 小时
注册时间
2015-1-5
最后登录
2015-1-7

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
求一SAS程序,比如我的数据集是这样的
no   year   money
1     2008     20
1     2010     20
2     2009     30
3     2010     40
1     2009     30
2     2010     50
2     2008     30
……

我想输出这样的结果
no     year     money
1       2008    20
2       2008    30
1       2009    30
2       2009   30
1       2010   20
2       2010   50


即找出三年中重复出现的观测对象(剔除仅出现过一年或两年的对象,比如例子中的“3”),然后按照“year”分组排列,每个人每年的花费的金钱数在后面也可以一目了然

谢谢各位大神!


二维码

扫码加我 拉你入群

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

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

关键词:sas程序 观测值 money year 一目了然 程序

沙发
teqel 发表于 2015-1-5 10:42:40 |只看作者 |坛友微信交流群
看看这个
  1. data a;
  2. input no year money;
  3. cards;
  4. 1     2008     20
  5. 1     2010     20
  6. 2     2009     30
  7. 3     2010     40
  8. 1     2009     30
  9. 2     2010     50
  10. 2     2008     30
  11. ;

  12. proc sort data=a;
  13. by no;
  14. run;

  15. data a;
  16. set a;
  17. by no;
  18. if first.no and last.no then delete;
  19. run;

  20. proc sort data=a;
  21. by year no;
  22. run;
复制代码

使用道具

藤椅
sushe1527 发表于 2015-1-5 10:42:59 |只看作者 |坛友微信交流群
  1. data d;
  2. input no   year   money;
  3. cards;
  4. 1     2008     20
  5. 1     2010     20
  6. 2     2009     30
  7. 3     2010     40
  8. 1     2009     30
  9. 2     2010     50
  10. 2     2008     30
  11. ;run;
  12. proc sql;
复制代码


使用道具

板凳
teqel 发表于 2015-1-5 10:51:03 |只看作者 |坛友微信交流群
sushe1527 发表于 2015-1-5 10:42
SQL显示出纵向处理的强大:)

使用道具

报纸
月月井 发表于 2015-1-5 10:56:59 |只看作者 |坛友微信交流群
teqel 发表于 2015-1-5 10:42
看看这个
我在我的数据集理试了一下您的程序,发现只是筛检出了重复观测值,但是没有筛检出同时在08-10年都出现的观测值,筛检出的观测值有些还是只出现在2008年。。。

使用道具

地板
teqel 发表于 2015-1-5 11:11:53 |只看作者 |坛友微信交流群
月月井 发表于 2015-1-5 10:56
我在我的数据集理试了一下您的程序,发现只是筛检出了重复观测值,但是没有筛检出同时在08-10年都出现的观 ...
不可能把?我测试过的

使用道具

7
月月井 发表于 2015-1-5 11:14:09 |只看作者 |坛友微信交流群
teqel 发表于 2015-1-5 10:42
看看这个
不好意思我刚才说错了,筛检出来的观测值肯定是出现了两次及以上的,但是现在筛检出来有些观测值是出现在08和10年有money记录,但是09年没有出现。我现在想要08、09、10年均出现过money记录的观测值,不知道大神能否指教,谢谢了!

使用道具

8
teqel 发表于 2015-1-5 11:24:42 |只看作者 |坛友微信交流群
月月井 发表于 2015-1-5 11:14
不好意思我刚才说错了,筛检出来的观测值肯定是出现了两次及以上的,但是现在筛检出来有些观测值是出现在 ...
这个程序和SQL是一样的结果,只是用data step来实现

使用道具

9
sushe1527 发表于 2015-1-5 14:01:29 |只看作者 |坛友微信交流群
  1. data d;
  2. input no   year   money;
  3. cards;
  4. 1     2008     20
  5. 1     2009     30
  6. 1     2010     20
  7. 2     2010     30
  8. 2     2010     50
  9. 2     2010     30
  10. 3     2010     40
  11. ;run;
  12. proc sql;
  13. select * from d group by no having count(distinct(year))=3  order by year,money;
  14. quit;
复制代码


使用道具

10
月月井 发表于 2015-1-7 10:00:38 |只看作者 |坛友微信交流群
teqel 发表于 2015-1-5 11:11
不可能把?我测试过的
喔……是我自己搞错了,不好意思。谢谢大神!

使用道具

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

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

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

GMT+8, 2024-4-24 08:03