楼主: elek.me
7152 27

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

11
elek.me 发表于 2011-1-10 13:34:19
胖子?  你是说二楼吗?
我的博客: http://elek.me/sas
联系我: http://about.me/elek

12
elek.me 发表于 2011-1-10 13:35:05
soporaeternus 发表于 2011-1-10 11:55
elek.me 发表于 2011-1-10 11:25
而且我发现这个论坛里的朋友们,都比较偏爱sql.....
京剧,hopewell等诸大神嘴角露出一丝狡捷的微笑......
和我一个朋友刚好相反,能不用sql就尽量不用。
现在我也是这个习惯。
sql在很多情况下,效率不好。
我的博客: http://elek.me/sas
联系我: http://about.me/elek

13
baoaibaobao 发表于 2011-1-10 13:42:02
小弟不才,思想简单,请高手轻拍
  1. data data1;
  2.         input no x0 y0 a0 ab x1 x2 x3;
  3. cards;
  4. 1 1 1 1 1 2 . 2
  5. 2 . . . . 1 1 1
  6. 3 1 2 3 4 . . .
  7. 4 . . 2 3 3 4 .
  8. ;
  9. data zachary;
  10. set data1;   
  11.         format variable $5.;
  12.         array visit1 x0 y0 a0 ab;
  13.         array visit2 x1-x3;
  14.         array a _numeric_;
  15.         a1=0;
  16.         a2=0;
  17.                 do i=1 to dim(visit1);
  18.                         retain a1;
  19.                                 a1=sum(missing(visit1(i)),a1);
  20.                         if a1^=dim(visit1);
  21.                 end;
  22.                 do j=1 to dim(visit2);
  23.                         retain a2;
  24.                                 a2=sum(missing(visit2(j)),a2);
  25.                         if a2^=dim(visit2);
  26.                 end;        
  27.                 do z=2 to dim(a);
  28.                         if a(z)=. then do;
  29.                                 variable=vname(a(z));
  30.                                 output;
  31.                         end;
  32.                 end;
  33.         format value 5.;
  34.         keep no variable value;        
  35. run;
复制代码

14
elek.me 发表于 2011-1-10 13:48:35
baoaibaobao 发表于 2011-1-10 13:42
小弟不才,思想简单,请高手轻拍
  1. data data1;
  2.         input no x0 y0 a0 ab x1 x2 x3;
  3. cards;
  4. 1 1 1 1 1 2 . 2
  5. 2 . . . . 1 1 1
  6. 3 1 2 3 4 . . .
  7. 4 . . 2 3 3 4 .
  8. ;
  9. data zachary;
  10. set data1;   
  11.         format variable $5.;
  12.         array visit1 x0 y0 a0 ab;
  13.         array visit2 x1-x3;
  14.         array a _numeric_;
  15.         a1=0;
  16.         a2=0;
  17.                 do i=1 to dim(visit1);
  18.                         retain a1;
  19.                                 a1=sum(missing(visit1(i)),a1);
  20.                         if a1^=dim(visit1);
  21.                 end;
  22.                 do j=1 to dim(visit2);
  23.                         retain a2;
  24.                                 a2=sum(missing(visit2(j)),a2);
  25.                         if a2^=dim(visit2);
  26.                 end;        
  27.                 do z=2 to dim(a);
  28.                         if a(z)=. then do;
  29.                                 variable=vname(a(z));
  30.                                 output;
  31.                         end;
  32.                 end;
  33.         format value 5.;
  34.         keep no variable value;        
  35. run;
复制代码
data1中no为编号(唯一),x0 y0 a0 ab为访视1的变量,x1 x2 x3为访视2的变量。
没有体现出来。这个信息,要从第二个数据集里自动提取。
我的博客: http://elek.me/sas
联系我: http://about.me/elek

15
baoaibaobao 发表于 2011-1-10 13:53:23
14# elek.me 也就是说我的visit1和visit2不能自己定义,要从data2中提取,是这样的吗?

16
elek.me 发表于 2011-1-10 13:56:47
baoaibaobao 发表于 2011-1-10 13:53
14# elek.me 也就是说我的visit1和visit2不能自己定义,要从data2中提取,是这样的吗?
对的。 是这样。 我估计他的表2肯定不是这么简单。
我的博客: http://elek.me/sas
联系我: http://about.me/elek

17
elek.me 发表于 2011-1-10 13:57:36
baoaibaobao 发表于 2011-1-10 13:53
14# elek.me 也就是说我的visit1和visit2不能自己定义,要从data2中提取,是这样的吗?
而且,我建议你也同时考虑字符型变量的情况。
我的博客: http://elek.me/sas
联系我: http://about.me/elek

18
elek.me 发表于 2011-1-10 14:03:54
2# dxystata 兄弟原来你就在这里啊。 呵呵。
我的博客: http://elek.me/sas
联系我: http://about.me/elek

19
guo.bailing 发表于 2011-1-10 14:40:55
三楼换了图像,没以前的那个给力啊!
自助者,天助之!

20
yatming 发表于 2011-1-10 14:57:33
11# elek.me
是三楼,三楼是我发小。哈哈

其实sql 效率未必慢,只是sas没有提供可读性较强的option,而现在的option要对sql机制相当了解的情况下可调,其运算效率不下data 步,甚至几倍快于。
就如一个单单的join,其实内部机制是优化器可选择四种查询算法:merge join,index join,hash join,还有就是traversal。不过sql不是sas的重点,不奇怪。

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

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