楼主: elek.me
7118 27

[技术讨论与投票] 根据要求查找缺失值 [推广有奖]

  • 0关注
  • 5粉丝

硕士生

1%

还不是VIP/贵宾

-

威望
0
论坛币
914 个
通用积分
0
学术水平
58 点
热心指数
44 点
信用等级
7 点
经验
2963 点
帖子
137
精华
0
在线时间
123 小时
注册时间
2010-12-17
最后登录
2011-9-15

楼主
elek.me 发表于 2011-1-10 10:03:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
一个兄弟问我的问题,大家有兴趣可以自己写一下。
我自己的解决方法可参见:http://elek.me/sas-homework-find-missing-values.html


Datasets:
  1. data data1;
  2.         input no x0 y0 a0 ab x1 x2 x3;
  3. cards;
  4. 1 1 1 1 1 2 2 2
  5. 2 . . . . 1 1 1
  6. 3 1 2 3 4 . . .
  7. 4 . . 2 3 3 4 .
  8. ;

  9. data data2;
  10.         input variable $ visit;
  11. cards;
  12. x0 1
  13. y0 1
  14. a0 1
  15. ab 1
  16. x1 2
  17. x2 2
  18. x3 2
  19. ;
复制代码
Expected dataset:
data1中no为编号(唯一),x0 y0 a0 ab为访视1的变量,x1 x2 x3为访视2的变量。现在核查缺失的情况:如果某个个体访视1的变量全部缺失,则查访视1的四个变量时忽略这个个体,访视2类似。结果如下:

  1. no   variable   value
  2. 4      x0          .
  3. 4      y0          .
  4. 4      x3          .
复制代码
二维码

扫码加我 拉你入群

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

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

关键词:缺失值 Variable datasets Expected Homework 缺失 缺失 缺失

已有 2 人评分经验 学术水平 热心指数 收起 理由
peijiamei + 100 + 3 + 3 鼓励积极发帖讨论
dxystata + 1 + 1 我很赞同

总评分: 经验 + 100  学术水平 + 4  热心指数 + 4   查看全部评分

本帖被以下文库推荐

我的博客: http://elek.me/sas
联系我: http://about.me/elek

沙发
dxystata 发表于 2011-1-10 10:52:02
谢谢elek.me 兄!
已有 1 人评分热心指数 收起 理由
论坛数据分析 + 1 stata版主捧场SAS

总评分: 热心指数 + 1   查看全部评分

藤椅
soporaeternus 发表于 2011-1-10 10:54:28
  1. data _null_;
  2.         set data2 nobs=nobs;
  3.         call symputx("NOBS",nobs);
  4.         stop;
  5. run;
  6. %put &NOBS;

  7. data t1;
  8.         set data1;
  9.         array _arr _all_;
  10.         do i=1 to %eval(&NOBS+1) by 1;
  11.                 variable=vname(_arr[i]);
  12.                 value=_arr[i];
  13.                 if upcase(variable)^="NO" then output;
  14.         end;
  15.         keep no variable value;
  16. run;

  17. proc sql;
  18.         create table t2(where=(missing(value))) as
  19.                 select
  20.                         a.*
  21.                 from t1 a
  22.                 inner join data2 b
  23.                 on a.variable=b.variable
  24.                 group by
  25.                         a.no
  26.                         ,b.visit
  27.                 having sum(case when missing(a.value) then 1 else 0 end)^=count(*)
  28.         ;
  29. quit;
复制代码
积极响应号召,练手学习......
已有 2 人评分论坛币 学术水平 热心指数 收起 理由
论坛数据分析 + 100 + 1 + 1 观点有启发
guo.bailing + 2 观点有启发

总评分: 论坛币 + 100  学术水平 + 3  热心指数 + 1   查看全部评分

Let them be hard, but never unjust

板凳
elek.me 发表于 2011-1-10 11:09:47
楼上思维很犀利!学习了
我的博客: http://elek.me/sas
联系我: http://about.me/elek

报纸
yatming 发表于 2011-1-10 11:18:39
  1. proc sql;
  2.         create table temp01 as
  3.         select
  4.                 a.no,
  5.                 b.visit,
  6.                 b.variable,
  7.                 sum(
  8.                         case when variable='x0' then x0
  9.                          when variable='y0' then y0
  10.                          when variable='a0' then a0
  11.                          when variable='ab' then ab
  12.                          when variable='x1' then x1
  13.                          when variable='x2' then x2
  14.                          when variable='x3' then x3 else . end
  15.                 ) as x
  16.         from data1 as a
  17.         cross join data2 as b
  18.         group by a.no,b.visit,b.variable
  19.         ;

  20.         create table temp02 as
  21.         select
  22.                 *
  23.         from temp01 as a
  24.         where exists (
  25.                 select * from (
  26.                         select no,visit from temp01 group by no,visit
  27.                         having count(1)<>count(case when x=. then 1 else . end)
  28.                         and count(1)<>count(x)
  29.                 ) as b where a.no=b.no and a.visit=b.visit
  30.         ) and x is missing
  31.         ;
  32. quit;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
论坛数据分析 + 100 + 1 + 1 鼓励积极发帖讨论

总评分: 论坛币 + 100  学术水平 + 1  热心指数 + 1   查看全部评分

地板
elek.me 发表于 2011-1-10 11:25:20
yatming 发表于 2011-1-10 11:18
  1. proc sql;
  2.         create table temp01 as
  3.         select
  4.                 a.no,
  5.                 b.visit,
  6.                 b.variable,
  7.                 sum(
  8.                         case when variable='x0' then x0
  9.                          when variable='y0' then y0
  10.                          when variable='a0' then a0
  11.                          when variable='ab' then ab
  12.                          when variable='x1' then x1
  13.                          when variable='x2' then x2
  14.                          when variable='x3' then x3 else . end
  15.                 ) as x
  16.         from data1 as a
  17.         cross join data2 as b
  18.         group by a.no,b.visit,b.variable
  19.         ;

  20.         create table temp02 as
  21.         select
  22.                 *
  23.         from temp01 as a
  24.         where exists (
  25.                 select * from (
  26.                         select no,visit from temp01 group by no,visit
  27.                         having count(1)count(case when x=. then 1 else . end)
  28.                         and count(1)count(x)
  29.                 ) as b where a.no=b.no and a.visit=b.visit
  30.         ) and x is missing
  31.         ;
  32. quit;
复制代码
不错。 不过如果问题的数据集结构发生改变的话,这个就不好使了。
已有 1 人评分论坛币 学术水平 收起 理由
论坛数据分析 + 100 + 2 博客写的很好,受益!

总评分: 论坛币 + 100  学术水平 + 2   查看全部评分

我的博客: http://elek.me/sas
联系我: http://about.me/elek

7
elek.me 发表于 2011-1-10 11:25:54
而且我发现这个论坛里的朋友们,都比较偏爱sql.....
我的博客: http://elek.me/sas
联系我: http://about.me/elek

8
soporaeternus 发表于 2011-1-10 11:55:18
elek.me 发表于 2011-1-10 11:25
而且我发现这个论坛里的朋友们,都比较偏爱sql.....
京剧,hopewell等诸大神嘴角露出一丝狡捷的微笑......
Let them be hard, but never unjust

9
lancesong 发表于 2011-1-10 12:04:35
新手报到  哎

10
yatming 发表于 2011-1-10 12:07:05
7# elek.me
呵呵,其实是乐于以效率为重。
这段写戳了,扩展性确实不好,好的让胖子写掉了。

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

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