楼主: dxystata
2541 8

如果该列变量全为缺失,删除这个变量 [推广有奖]

版主

已卖:302份资源

大师

37%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
183395 个
通用积分
15333.1475
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
298627 点
帖子
5586
精华
1
在线时间
13632 小时
注册时间
2006-6-21
最后登录
2025-12-22

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

楼主
dxystata 发表于 2014-11-17 14:42:31 |AI写论文
30论坛币
RT,变量可能为数值型或字符型,谢谢!data aaa;
input x y z$;
cards;
1 . .
2 . .
;
run;

判断y 和 z取值全为缺失后,删除y 和 z。





关键词:cards Input card Data put

本帖被以下文库推荐

沙发
nomad5 发表于 2014-11-17 16:04:29
  1. data aaa;
  2.     input x y z$;
  3.     cards;
  4. 1 . .
  5. 2 . .
  6.     ;
  7. run;

  8. data _null_;
  9.     set sashelp.vcolumn end=final;
  10.     where memname="AAA";
  11.     call symput("n"||strip(put(_n_,best.)),strip(name));
  12.     if final then call symput("num",strip(put(_n_,best.)));
  13. run;

  14. %macro m1;
  15. %do i=1 %to %eval(&num.);
  16.     data _null_;
  17.         set aaa end=final;
  18.         if missing(&&n&i..) then _&&n&i..=0;
  19.         else _&&n&i..=1;
  20.         retain __&&n&i..;
  21.         if _n_=1 then __&&n&i..=0;
  22.         __&&n&i..=__&&n&i..+_&&n&i..;
  23.         if final then call symput("check",strip(put(__&&n&i..,best.)));
  24.     run;
  25.     %if &check.=0 %then %do;
  26.         data aaa;
  27.             set aaa;
  28.             drop &&n&i..;
  29.         run;
  30.     %end;
  31. %end;
  32. %mend m1;
  33. %m1;
复制代码

藤椅
wwang111 发表于 2014-11-17 16:07:45
  1. data _null_;
  2. set sashelp.vcolumn(keep=name libname memname) end=last;
  3. where libname='WORK' and memname='AAA';
  4. length code1 code2 $1000;
  5. retain code2;
  6. code1='data '||strip(name)||"; set aaa end=last;var="||quote(strip(name))||";if missing("||strip(name)||") then n+1;if last;keep var n;run;";
  7. call execute(code1);
  8. if _n_=1 then code2='data all;set '||strip(name);
  9. else code2=strip(code2)||' '||strip(name);
  10. if last then do;
  11. code2=strip(code2)||';run;';
  12. call execute(code2);
  13. end;
  14. run;

  15. data _null_;
  16. set aaa end=last;
  17. if last then call symput('obs',cats(_n_));
  18. run;

  19. proc sql noprint;
  20. select distinct var into: missvar separated by " "
  21. from all
  22. where n=&obs;
  23. quit;

  24. data wanted;
  25. set aaa;
  26. drop &missvar;
  27. run;
复制代码

板凳
mingfeng07 学生认证  发表于 2014-11-17 21:28:08
  1. data a;
  2. input x y z;
  3. cards;
  4. 1 . .
  5. 2 . .
  6. ;
  7. run;
  8. %macro test(work,data,want);
  9. proc datasets lib=&work;
  10. contents data=&data out=out;
  11. quit;
  12. proc sql;
  13. select count(*) into:n from out;
  14. select count(*) into:t from &data;
  15. select name into:name1-:name%trim(%left(&n)) from out;
  16. %do i=1 %to &n.;
  17. select sum(missing(&&name&i.)) into:sum&i. from &data;
  18. %end;
  19. quit;
  20. data &want;
  21. set &data;
  22. %do i=1 %to &n.;
  23. %if %eval(&&sum&i.-&t.)=0  %then %do;
  24. drop &&name&i.;
  25. %end;
  26. %end;
  27. run;
  28. %mend;
  29. %test(work,a,want);
复制代码

报纸
dxystata 发表于 2014-11-18 07:51:57
感觉代码都很复杂啊!

地板
dxystata 发表于 2014-11-18 08:12:46
如果仅是字符变量呢?

7
pobel 在职认证  发表于 2014-11-18 14:05:27
%let ds=work.aaa;
proc freq data=&ds nlevels;
   table _all_;
   ods output nlevels=nlevels(where=(nnonmisslevels>0));
run;

data _null_;
    set nlevels end=last;
        if _n_=1 then call execute("data &ds; set &ds; keep ");
                      call execute(tablevar);
        if last  then call execute(";run;");
run;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Tigflanker + 5 + 3 + 3 + 3 绝了

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

8
mingfeng07 学生认证  发表于 2014-11-18 18:41:17
dxystata 发表于 2014-11-18 07:51
感觉代码都很复杂啊!
我的代码很简单的,而且对字符型和数值型都适用。

9
xuelin55 发表于 2014-11-20 13:18:35
pobel 发表于 2014-11-18 14:05
%let ds=work.aaa;
proc freq data=&ds nlevels;
   table _all_;
这个好巧妙啊,赞一个

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 06:29