全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6647 5
2013-01-09
我的问题涉及到样本剔除,条件设定有些麻烦,还请各位大侠不吝赐教!多谢多谢!

我的数据结构如下:(var1-var5均为数字型)
id  year  var1  var2  var3  var4  var5
1  2010    10     11        .     12        .
1  2011    10     10      10    10      10
1  2012    12     11      12    10      11
2  2010    15       9      12      3        9
2  2011      8     10      15    11      10
2  2012    10       8      10    10      12
3  2010    11      11     11     11     11
3  2011    10      10     10     10     10
3  2012     12     12     12     12     12
……
我想实现的结果是:若一个id对应的var1-var5中,任何一个变量存在缺失值(如2010年的 id1),那么就把所有与 id1有关的观测值都删除,即2010年至2012年所有的 id1都删掉。

拜托了!谢谢~



二维码

扫码加我 拉你入群

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

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

全部回复
2013-1-9 03:43:51
not sure you still need to keep the original columns (var1-var5) or just need the new columns to record the left columns (var1-var4, say the original var3 has been taken out).
there will be some problems in the data either way.
二维码

扫码加我 拉你入群

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

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

2013-1-9 03:56:19
sorry about misunderstanding in the beginning.
I just put my rough thought here.



/****example data******/

data a;
input id $ year  var1  var2  var3  var4  var5;
cards;
1  2010    10     11       .     12       .
1  2011    10     10      10    10      10
1  2012    12     11      12    10      11
2  2010    15      9      12     3       9
2  2011     8     10      15    11      10
2  2012    10      8      10    10      12
3  2010    11      11     11     11     11
3  2011    10      10     10     10     10
3  2012     12     12     12     12     12
4  2012     12     12     12     12     12
4  2011     12     .     12     12     12
5  2010     12     12     12     12     12
6  2010     .     12     12     12     12
6  2011     12     12     12     12     12
6  2012     12     12     12     12     12
7  2011     12     12     12     12     12
7  2012     12     12     12     12     12
8  2010     12     12     12     12     12
8  2011     12     .     12     12     12
8  2012     12     12     12     12     12
9  2011     12     12     .     12     12
9  2012     12     12     12     12     12
;
run;
/*******find ID with missing value****/
data b;
set a;
count=sum(missing(var1),missing(var2),
missing(var3),missing(var4),missing(var5));
run;
proc sql;
create table ref as
select distinct(id)
from b
where count>0;
quit;


/***********obtain the result without the missing value*******/
proc sql;
create table want as
select A.* from b as A
where a.ID not in (select B.id from ref as b);
quit;


二维码

扫码加我 拉你入群

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

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

2013-1-9 07:21:38
It is easier to use SQL in this case.


proc sql;
  select *
  from a
  where id not in (
  select distinct id
  from a
  where  var1+var2+var3+var4+var5=.
  )
  ;
  QUIT;

二维码

扫码加我 拉你入群

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

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

2013-1-9 21:09:43
bobguy 发表于 2013-1-9 07:21
It is easier to use SQL in this case.
多谢大侠!成功解决问题,SQL太好用了!
二维码

扫码加我 拉你入群

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

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

2013-1-9 21:20:19
tangliang0905 发表于 2013-1-9 03:56
sorry about misunderstanding in the beginning.
I just put my rough thought here.
多谢英雄帮忙!问题已解决
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群