SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1146|回复: 5
打印 上一主题 下一主题

如何删除全部是缺省值的 行 或 列?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2007-1-23 09:38:32 | 只看该作者

如何删除全部是缺省值的 行 或 列?

如何删除全部是缺省值的 行 或 列?

比如,
1, delete 第3和5行
2, or delete v2和v3列?
3, position and type of variables (both char and num/date/time) and no. of records are not fixed... <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->

<!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: --> 谢谢先。

***************;
data test;
input v1-v6;
datalines;
1 . . 1 1 1
1 . . 1 1 1
. . . . . .
1 . . . 1 .
. . . . . .
1 . . . 1 1
;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2007-1-23 10:37:10 | 只看该作者

MISSING

感觉可以分两部,先删掉全是的行,得出一个数据集,然后再删某一个全列的.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2007-1-24 13:15:41 | 只看该作者

呵呵

怎么又跑到这里来发帖了??
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2007-1-24 13:23:21 | 只看该作者

先来个笨办法

先来个笨办法

生成两个临时变量:一个是行合计,一个是列合计。

然后如果行合计=. ,那就delete这行

如果列合计=.  ,那就drop这行
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2007-1-24 22:54:20 | 只看该作者

to nfiona

如果是字符型的呢?并且对一行来说,如何求值。如果有上百个变量,有简便的求和表达式吗?总不能sum=a1+a2+...全部列举一遍吧?
还引申出一个问题,是否可以得到数据集所有变量名称的数组,以便统一处理变量名。attrn()方法返回的是有多少个变量,但不能返回变量的数组。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2007-1-26 16:16:01 | 只看该作者

呵呵~

[code:01c28]%let lib=WORK;
%let mem=missdata;

options symbolgen;

data missdata;
  input n1 n2 n3 n4 n5 n6 n7 n8 c1 $ c2 $ c3 $ c4 $;
  sumnum=sum&#40;of _numeric_&#41;;
  sumchar=COMPRESS&#40;COMPBL&#40;KSTRCAT&#40;OF _character_&#41;&#41;&#41;;
datalines;
1 &#46; 1 &#46; 1 &#46; 1 4 a &#46; c &#46;
1 &#46; &#46; &#46; 2 &#46; &#46; 5 e &#46; g h
1 &#46; 1 &#46; 3 &#46; &#46; 6 &#46; &#46; k l
3 &#46; 5 &#46; 8 &#46; 4 7 f &#46; y z
&#46; &#46; &#46; &#46; &#46; &#46; &#46; &#46; &#46; &#46; &#46; &#46;
6 &#46; 5 &#46; 8 &#46; &#46; 7 f &#46; y z
;
data tempdata;
set missdata;
if sumnum=&#46; and sumchar='' then delete;
drop sumnum sumchar;
run;
proc sql noprint;
  select name, put&#40;count&#40;name&#41;,5&#46;-L&#41; into &#58;clist separated by ' ' , &#58;charct
  from dictionary&#46;columns
  where libname=upcase&#40;&quot;&amp;lib&quot;&#41; and memname=upcase&#40;&quot;&amp;mem&quot;&#41; and type='char';

  select name, put&#40;count&#40;name&#41;,5&#46;-L&#41; into &#58;nlist separated by ' ', &#58;numct
  from dictionary&#46;columns
  where libname=upcase&#40;&quot;&amp;lib&quot;&#41; and memname=upcase&#40;&quot;&amp;mem&quot;&#41; and type='num';
quit;

data _null_;
  set tempdata end=finished;

  array num_vars&#91;*&#93; _NUMERIC_;
  array char_vars&#91;*&#93; _CHARACTER_;

  array num_miss &#91;&amp;numct&#93; $ &#40;&amp;numct*'missing'&#41;;
  array char_miss &#91;&amp;charct&#93; $ &#40;&amp;charct*'missing'&#41;;
  

  length list $ 50;
  

  do i=1 to dim&#40;num_vars&#41;;
    if num_vars&#40;i&#41; ne &#46; then num_miss&#40;i&#41;='non-miss';
  end;
  do i=1 to dim&#40;char_vars&#41;;
    if char_vars&#40;i&#41; ne '' then char_miss&#40;i&#41;='non-miss';
  end;


  if finished then do;
  do i= 1 to dim&#40;num_vars&#41;;
    if num_miss&#40;i&#41; = 'missing' then list=trim&#40;list&#41;||' '||trim&#40;vname&#40;num_vars&#40;i&#41;&#41;&#41;;
  end;
  do i= 1 to dim&#40;char_vars&#41;;
    if char_miss&#40;i&#41; = 'missing' then list=trim&#40;list&#41;||' '||trim&#40;vname&#40;char_vars&#40;i&#41;&#41;&#41;;
  end;
  call symput&#40;'mlist',list&#41;;
  end;
run;
                                                                                                                                 
data notmiss;
  set tempdata;
  drop &amp;mlist;
run;
proc print;
run;[/code:01c28]
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-11 10:59 , Processed in 0.070112 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表