楼主: akoug
3568 15

[原创博文] 怎样才能保留住含特定值的观测呢? [推广有奖]

  • 0关注
  • 5粉丝

已卖:2210份资源

博士生

4%

还不是VIP/贵宾

-

威望
0
论坛币
6277 个
通用积分
338.6303
学术水平
21 点
热心指数
20 点
信用等级
14 点
经验
3045 点
帖子
87
精华
0
在线时间
242 小时
注册时间
2007-12-20
最后登录
2025-5-3

楼主
akoug 学生认证  发表于 2010-8-15 23:34:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
删除含有特定值的观测是大家已经讨论过的了,比如要删掉含缺失值的观测所用的方法就是
Data deleted_dataset;
      Set original_dataset;
      Array numr _numeric_;
      Do Over numr;
       If numr in(.) Then delete;
      end;
Run;

也以含缺失值的观测为例,如果只想保留含有缺失值的观测该如何实现呢?

我很白目的使用了类似的方法,可惜失败了:
Data deleted_dataset;
      Set original_dataset;
      Array numr _numeric_;
      Do Over numr;
       If numr in(.) ; *就是直接套用上面的方法,可惜不对;
      end;
Run;

请教各位高手了!
二维码

扫码加我 拉你入群

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

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

关键词:Original dataset Deleted numeric delete 如何

回帖推荐

hopewell 发表于2楼  查看完整内容

本帖被以下文库推荐

沙发
hopewell 发表于 2010-8-16 08:06:06
  1. data raw;
  2.         input x y z;
  3. datalines;
  4. 1 2 3
  5. . 2 3
  6. . . 3
  7. . . .
  8. ;
  9. data out;
  10.         set raw;
  11.         if nmiss(of _numeric_) gt 0;
  12. run;
复制代码
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
jingju11 + 1 + 1 + 1 简洁

总评分: 经验 + 3  论坛币 + 3  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
akoug 学生认证  发表于 2010-8-16 10:36:56
昨晚搞了一晚上,好像这个code也可行,估计不如楼上效率高

Data deleted_dataset;
      Set original_dataset;
      Array numr _numeric_;
      Do Over numr;
       If numr in(.) then output deleted_dataset;
      end;
Run;

板凳
rdzr 发表于 2010-8-16 10:53:28
1# akoug

俺来献下丑:

data a;
   input x y z;
cards;
1 2 3
. 2 3
. . 3
. . .
;
proc sql;
select x,y,z from a
  where x/y/z is missing;
quit;

报纸
tj0412ymy 发表于 2010-8-16 17:27:49
3# akoug
你这个代码错了,自己找个小数据集试一下。

地板
xiaoxiahu0571 发表于 2010-8-16 20:26:34
2# hopewell    请教下:
data raw;
   input x y z;
datalines;
1 2 3
. 2 3
. . 3
. . .
;
data out;
        set raw;
  a=nmiss(of _numeric_);
        if nmiss(of _numeric_) gt 0;
run;
这里的a是缺失值的个数吧?但是输出结果不对,怎么解释呢?谢谢!

7
jingju11 发表于 2010-8-16 21:33:26
xiaoxiahu0571 发表于 2010-8-16 20:26
2# hopewell    请教下:
data raw;
   input x y z;
datalines;
1 2 3
. 2 3
. . 3
. . .
;
data out;
length a $8.;
        set raw;
  a=nmiss(of _numeric_);
        if nmiss(of _numeric_) gt 0;
run;
这里的a是缺失值的个数吧?但是输出结果不对,怎么解释呢?谢谢!
每一次a 初始为missing值。而且_numeric_包含了初始的a,所以a值总是多1个。
所以要得到正确的a可以考虑

  1. a = nmiss(of _numeric_)-1;
  2. or
  3. a = 0;
  4. a = nmissing(of _numeric_);
  5. or
  6. length a $8.;
  7. a = nmissing(of _numeric_); *force to convert;
复制代码

当然hope的程序是正确的。他没有创建新的变量。
已有 3 人评分学术水平 热心指数 信用等级 收起 理由
论坛数据分析 + 1 观点有启发
crackman + 1 + 1 呵呵用retain也可以吧
hopewell + 1 + 1 + 1 我很赞同

总评分: 学术水平 + 3  热心指数 + 2  信用等级 + 1   查看全部评分

8
akoug 学生认证  发表于 2010-8-16 22:06:25
5# tj0412ymy

我这里的用意是:a是把含零的删掉,b是把含零的保留。事实上我是想找一个对任何的特定的被含有的值都适用的code,并非是只是缺失值。

data comp;
input x1 x2 x3 f;
cards;
1 1 1 4
1 2 1 5
2 1 1 3
2 2 1 2
1 1 2 1
1 2 2 8
2 1 2 7
2 2 2 6
1 1 0 4
0 2 1 3
2 0 2 4
;
run;
Data a;
      Set comp;
      Array numr _numeric_;
      Do Over numr;
      If numr in(0) Then delete;
   end;
Run;

*这个有问题么;
data b;
  set comp;
  Array numr _numeric_;
      Do Over numr;
      if numr in(0) then output b;
   end;
  
Run;
proc print data=comp;
proc print data=a;
proc print data=b;
run;

我自己试过的才觉得可行,不知道错在哪里,还请指教一二呀

9
soporaeternus 发表于 2010-8-16 22:12:25
楼上做法原数据一条有n个0(指定值)的话,将被输出n次
Let them be hard, but never unjust

10
akoug 学生认证  发表于 2010-8-16 22:15:23


原来是这样啊

惭愧惭愧

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

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