SAS中文论坛

标题: 请教一个DATA步的问题 [打印本页]

作者: shiyiming    时间: 2011-4-25 21:12
标题: 请教一个DATA步的问题
菜鸟请教,还请高手指导,假如我有一个数据集,有X个变量 Y条观测值,X个变量中有N个变量所有的观测值都为空,我如何用最简单的方法剔除这N个变量呢?drop 和Keep语句虽然简单基本,但是如果变量特别多,须要一个一个的去找,然后再跳出来去除,有没有什么好办法可以不论N为多大,都可以简单的完成呢?感谢各位高手的帮忙!
作者: shiyiming    时间: 2011-4-25 21:27
标题: 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 -->
作者: shiyiming    时间: 2011-4-25 21:35
标题: Re: 请教一个DATA步的问题
呵呵,开始试图通过宏语句去解决,结果失败了,看来真的不是件特别简单的事啊,非常感谢你提供的参考资料! <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者: shiyiming    时间: 2011-4-26 02:32
标题: Re: 请教一个DATA步的问题
jingju
作者: shiyiming    时间: 2011-4-26 02:37
标题: 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]




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2