楼主: 抽抽鳗鱼
1544 6

SAS条件删除 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

初中生

52%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
101 点
帖子
12
精华
0
在线时间
8 小时
注册时间
2015-3-8
最后登录
2016-11-24

楼主
抽抽鳗鱼 发表于 2016-11-10 08:31:01 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
对于一个表格table,每个ID对应不同年份有不同的var1值,var2值,我想删除年份不完整的ID的所有值,比如说下表,我要的是2006-2014年,但是ID2缺失了2006年,我要怎么能挑出并删除2对应所有年份的数据,希望有大神帮助刚学SAS的菜鸟

      ID     year      var1        var2
       1      2006        2            1
       1      2007        2            3
       1      2008        1            4
        。。。。。。
       1      2014        1            3
       2      2007        2            4
       2      2008        3            2
        。。。。。。
       2      2014        2            1


二维码

扫码加我 拉你入群

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

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

关键词:Table ABLE sas的 year VaR 2014

沙发
恶搞1下 发表于 2016-11-10 09:17:16
data a;
        input id year var1 var2;
        cards;
        1 2006 2 1
        1 2007 2 3
        1 2008 1 4
        1 2014 1 3
        2 2007 2 4
        2 2008 3 2
        2 2014 2 1
        ;
run;
*找出id=2的数据输出并打印;
data a1;       
        set a;
        if id=2;
run;
proc print data = a1;run;
*删除id=2的所有数据,输出到新数据集a2中;
data a2;
        set a;
        if id=2 then delete;
run;

藤椅
wang1839 在职认证  发表于 2016-11-10 09:44:43
  1. data a;
  2. input id year var1 var2;
  3. cards;
  4. 1      2006        2            1
  5. 1      2007        2            3
  6. 1      2008        1            4
  7. 1      2009        1            4
  8. 1      2010        1            4
  9. 1      2011        1            4
  10. 1      2012        1            4
  11. 1      2013        1            4
  12. 1      2014        1            4
  13. 2      2007        2            4
  14. 2      2008        3            2
  15. 2      2014        2            1
  16. ;
  17. run;



  18. proc sort data=a out=id(keep=id) noudupkey;
  19.         by id ;
  20. run;

  21. /*create id include all years*/
  22. data dummy;
  23.         set id;
  24.         do year=2006 to 2014;
  25.         output;
  26.         end;
  27. run;

  28. /*create excluded id*/
  29. data exclude;
  30.         merge a(in=a) dummy;
  31.         by id year;
  32.         if  not a ;
  33. run;

  34. /*derive exclude id */
  35. proc sort data=exclude out=id1(keep=id) noudupkey;
  36.         by id ;
  37. run;


  38. data final;
  39.         merge a(in=a) id1(in=b);
  40.         by id;
  41.     if  not b;
  42. run;
复制代码

板凳
wang1839 在职认证  发表于 2016-11-10 10:03:53
/*method 2*/
data b;
        set a(where=(2005<year<2015));
        by id;
        dif=dif(year);
        if first.id then diff=.;else diff=dif;
        if (first.id & year^=2006)|  (last.id & year^=2014)| (not first.id & diff^=1) then output;
run;



data final1;
        merge a  b(keep=id in=b);
        if not b;
run;
       

报纸
l1i2n3i4n5g 在职认证  发表于 2016-11-10 10:10:09
data test;
input ID year var1 var2;
cards;
1 2006 2 1
1 2007 2 3
1 2008 1 4
1 2009 2 1
1 2010 2 3
1 2011 1 4
1 2012 2 3
1 2013 1 4
1 2014 1 3
2 2007 2 4
2 2008 3 2
2 2014 2 1
;
run;

proc sql;
create table test1 as
select *, sum(year) as var3 from test
group by id
order by id, year;
quit;

data test2;
set test1;
where var3=18090;
run;

地板
抽抽鳗鱼 发表于 2016-11-10 20:47:32
wang1839 发表于 2016-11-10 09:44
太感谢了

7
抽抽鳗鱼 发表于 2016-11-10 20:55:45
l1i2n3i4n5g 发表于 2016-11-10 10:10
data test;
input ID year var1 var2;
cards;
多谢多谢,已经搞定了

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-7 18:05