楼主: limuqi
7003 13

怎样删除含有missing value的行 [推广有奖]

  • 1关注
  • 2粉丝

本科生

27%

还不是VIP/贵宾

-

威望
0
论坛币
464 个
通用积分
0.0600
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
838 点
帖子
57
精华
0
在线时间
54 小时
注册时间
2011-8-2
最后登录
2016-1-5

楼主
limuqi 发表于 2013-4-23 02:47:22 |AI写论文
10论坛币
想请教一下我有一组数据 a
x  y  z
1 1  3
2 3  .
2 1  .
.  5  6

我想只选择没有mising value的那一列variable y(删除有missing value的数据列 x,z).

proc means data=a n nmiss ;
        var _numeric_;
        run;
可以输出非missing value 的个数,但无法删除。
数据列很多,所以不能手动删除。
想请教该怎么写,谢谢


最佳答案

可~乐 查看完整内容

data a; input x y z; cards; 1 1 3 2 3 2 2 1 . . 5 6 ; run; data b; set a; array temp(3) x y z; do i=1 to 3; if temp(i)=. then var_name=vname(temp(i)); end; drop i; run; proc sql noprint; select var_name into: varname separated by " " from b; quit; data c; set b; drop &varname. var_name; run;
关键词:missing value alue Miss SSIN

回帖推荐

ariman911 发表于3楼  查看完整内容

可以達成你想要的 不過應該還有更好的辦法 data a; input x y z; cards; 1 1 3 2 3 . 2 1 . . 5 6 ; proc transpose out=b; data b; set b; array acol{*} COL: ; do i = 1 to dim(acol); if acol{i}=. then delete; drop i; end; proc transpose data=b out=c; run; proc means data=c; run;

wodematlab 发表于7楼  查看完整内容

data a; input x y z; cards; 1 1 3 2 3 2 2 1 . . 5 6 . 2 . ; run; data b; set a; array temp(3) x y z; do i=1 to 3; if temp(i)=. then var_name=vname(temp(i)); end; drop i; run; proc sql noprint; select distinct var_name into: varname separated by " " from b; quit; %put &varname; ...

可~乐 发表于6楼  查看完整内容

data a; input x y z; cards; 1 1 3 2 3 2 2 1 . . 5 6 ; run; data b; set a; array temp(3) x y z; do i=1 to 3; if temp(i)=. then var_name=vname(temp(i)); end; drop i; run; proc sql noprint; select var_name into: varname separated by " " from b; quit; data c; set b; drop &varname. var_name; run;

本帖被以下文库推荐

沙发
可~乐 发表于 2013-4-23 02:47:23
data a;
input x  y  z;
cards;
1 1 3
2 3 2
2 1 .
. 5 6
;
run;

data b;
    set a;
        array temp(3) x y z;
                do i=1 to 3;
                        if temp(i)=. then var_name=vname(temp(i));
                end;
        drop i;
run;

proc sql noprint;
        select var_name into: varname separated by " "
        from b;
quit;

data c;
        set b;
        drop &varname. var_name;
run;
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
webgu + 100 + 100 + 1 + 1 + 1 加油

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

藤椅
yuerqieqie 发表于 2013-4-23 03:19:54
data b;
        set a;
        if nmiss(x, z)>0 then delete;
run;

板凳
ariman911 发表于 2013-4-23 05:33:09
可以達成你想要的
不過應該還有更好的辦法
data a;
input x  y  z;
cards;
1 1  3
2 3  .
2 1  .
.  5  6
;
proc transpose out=b;
data b;
set b;
array acol{*} COL: ;
do i = 1 to dim(acol);
if acol{i}=. then delete;
drop i;
end;
proc transpose data=b out=c;
run;
proc means data=c;
run;

报纸
slimdell 发表于 2013-4-23 16:17:55
yuerqieqie 发表于 2013-4-23 03:19
data b;
        set a;
        if nmiss(x, z)>0 then delete;
NMISS 很好
如果Y 为空值也要删除是不是应该用 if nmiss(x, y, z)>0啊

另外NMISS 和N, CMISS 以及MISSING的比较在SAS help里列举如下,如果楼主要处理的数据不全为num型可以参照
The NMISS function returns the number of missing values, whereas the N function returns the number of nonmissing values.
NMISS requires numeric values, whereas CMISS works with both numeric and character values.
NMISS works with multiple numeric values, whereas MISSING works with only one value that can be either numeric or character.

知乎专栏/微信公号同名:煮酒烹茶读书

地板
limuqi 发表于 2013-4-24 11:52:35
yuerqieqie 发表于 2013-4-23 03:19
data b;
        set a;
        if nmiss(x, z)>0 then delete;
用这个方法只保留第一行数据,
x y z
1 1 3
而我希望保留所有y列的数据
y
1
3
1
5
所以这个答案可能不太合适

7
wodematlab 发表于 2013-4-24 22:09:38
data a;
input x  y  z;
cards;
1 1 3
2 3 2
2 1 .
. 5 6
. 2 .
;
run;

data b;
    set a;
        array temp(3) x y z;
                do i=1 to 3;
                        if temp(i)=. then var_name=vname(temp(i));
                end;
        drop i;
run;

proc sql noprint;
        select distinct var_name into: varname separated by " "
        from b;
quit;
%put &varname;

data c;
        set b;
        drop &varname. var_name;
run;

8
可~乐 发表于 2013-4-24 22:21:40
wodematlab 发表于 2013-4-24 22:09
data a;
input x  y  z;
cards;
嗯,正解,忘记去重了。。。

9
wodematlab 发表于 2013-4-24 22:27:27
可~乐 发表于 2013-4-24 22:21
嗯,正解,忘记去重了。。。
其实不去重,程序运行也没有问题~

10
可~乐 发表于 2013-4-24 22:57:28
wodematlab 发表于 2013-4-24 22:27
其实不去重,程序运行也没有问题~
还是大神考虑比较周到。。。

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

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