全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6908 13
2013-04-23
悬赏 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;
二维码

扫码加我 拉你入群

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

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

全部回复
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;
二维码

扫码加我 拉你入群

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

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

2013-4-23 03:19:54
data b;
        set a;
        if nmiss(x, z)>0 then delete;
run;
二维码

扫码加我 拉你入群

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

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

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;
二维码

扫码加我 拉你入群

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

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

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.

二维码

扫码加我 拉你入群

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

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

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
所以这个答案可能不太合适
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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