SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 633|回复: 4
打印 上一主题 下一主题

请教一个DATA步的问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-4-25 21:12:58 | 只看该作者

请教一个DATA步的问题

菜鸟请教,还请高手指导,假如我有一个数据集,有X个变量 Y条观测值,X个变量中有N个变量所有的观测值都为空,我如何用最简单的方法剔除这N个变量呢?drop 和Keep语句虽然简单基本,但是如果变量特别多,须要一个一个的去找,然后再跳出来去除,有没有什么好办法可以不论N为多大,都可以简单的完成呢?感谢各位高手的帮忙!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-4-25 21:27:23 | 只看该作者

Re: 请教一个DATA步的问题

菜鸟搞不定这个问题,不过感觉下面的两个链接看懂了话,你的问题应该可以得到很好的解决:
<!-- m --><a class="postlink" href="http://support.sas.com/kb/24/612.html">http://support.sas.com/kb/24/612.html</a><!-- m -->
<!-- m --><a class="postlink" href="http://support.sas.com/resources/papers/proceedings10/048-2010.pdf">http://support.sas.com/resources/papers ... 8-2010.pdf</a><!-- m -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-4-25 21:35:57 | 只看该作者

Re: 请教一个DATA步的问题

呵呵,开始试图通过宏语句去解决,结果失败了,看来真的不是件特别简单的事啊,非常感谢你提供的参考资料! <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-4-26 02:32:54 | 只看该作者

Re: 请教一个DATA步的问题

jingju
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-4-26 02:37:20 | 只看该作者

Re: 请教一个DATA步的问题

[code:29j9wx66]data _null_;
  set had end =Eof;
  array _c&#91;*&#93; _character_; array _tc&#91;100&#93; $1 _temporary_;
  array _n&#91;*&#93; _numeric_  ; array _tn&#91;100&#93;    _temporary_;
  do i =1 to dim(_c);
     if _tc&#91;i&#93; ne 'c' then if not missing(_c&#91;i&#93;) then do;
             c ++1; _tc&#91;i&#93; ='c'; call symputx(cats('c', c), vname(_c&#91;i&#93;));
     end;
  end;
  do i =1 to dim(_n);
     if _tn&#91;i&#93; ne 1   then if not missing(_n&#91;i&#93;) then do;
             n ++1; _tn&#91;i&#93; =1  ; call symputx(cats('n', n), vname(_n&#91;i&#93;));
     end;
  end;
  if Eof then do;
     call symputx('n', n);
     call symputx('c', c);
  end;
run;

%macro keepem;
   %do i =1 %to &amp;c; &amp;&amp;c&amp;i&#46; %end;
   %do i =1 %to &amp;n; &amp;&amp;n&amp;i&#46; %end;
%mend keepem;

data have;
   set had;
   keep %keepem;
run;[/code:29j9wx66]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 13:32 , Processed in 0.073566 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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