楼主: pachong001
1346 4

[有偿编程] 如何剔除只有一种取值的变量 [推广有奖]

  • 0关注
  • 0粉丝

VIP1

高中生

25%

还不是VIP/贵宾

-

威望
0
论坛币
1912 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
212 点
帖子
11
精华
0
在线时间
23 小时
注册时间
2016-3-9
最后登录
2017-12-14

30论坛币
要求如题:如何剔除只有一种取值的变量
举一个例子,有一个数据集,包含a, b, c三个字符型变量,其中,b这个变量的取值只有一种,需要删掉,怎么用SAS表达出这种过程?


data a ;
input a$ b$ c$;
cards;
Jeremy M 1960
James M 1963
Richard M 1969
;
run;

最佳答案

wwang111 查看完整内容

data allvar; set sashelp.vcolumn; where libname="WORK" and memname="A"; keep name; run; data _null_; set allvar; call execute('proc sql; create table varnobs'||cats(_n_)||' as select '||quote(strip(name))||' as varname, count(distinct '||strip(name)||') as nobs from a; quit;'); run; data nobs; set varnobs:; run; ...
关键词:Richard Jeremy Input James cards

回帖推荐

wwang111 发表于2楼  查看完整内容

data allvar; set sashelp.vcolumn; where libname="WORK" and memname="A"; keep name; run; data _null_; set allvar; call execute('proc sql; create table varnobs'||cats(_n_)||' as select '||quote(strip(name))||' as varname, count(distinct '||strip(name)||') as nobs from a; quit;'); run; data nobs; set varnobs:; run; ...
沙发
wwang111 发表于 2017-11-24 14:25:50 |只看作者 |坛友微信交流群
data allvar;
set sashelp.vcolumn;
where libname="WORK" and memname="A";
keep name;
run;

data _null_;
set allvar;
call execute('proc sql;
               create table varnobs'||cats(_n_)||' as
               select '||quote(strip(name))||' as varname, count(distinct '||strip(name)||') as nobs
               from a;
               quit;');
run;

data nobs;
set varnobs:;
run;

proc sql noprint;
select varname into: dropvar separated by " "
from nobs
where nobs=1;
quit;

data wanted;
set a;
drop &dropvar;
run;

使用道具

藤椅
pachong001 发表于 2017-11-24 14:29:31 |只看作者 |坛友微信交流群
input之后被吞了两个dollar符号

使用道具

板凳
pachong001 发表于 2017-11-24 16:00:41 |只看作者 |坛友微信交流群
wwang111 发表于 2017-11-24 14:25
data allvar;
set sashelp.vcolumn;
where libname="WORK" and memname="A";
感谢大神!!!

使用道具

报纸
lovexialulu 发表于 2017-11-24 17:03:56 |只看作者 |坛友微信交流群
  1. data a ;
  2. input a$ b$ c;
  3. cards;
  4. Jeremy M 1960
  5. James M 1960
  6. Richard M 1960
  7. ;
  8. run;

  9. data allvar;
  10. set sashelp.vcolumn;
  11. where libname="WORK" and memname="A";
  12. keep name;
  13. run;

  14. proc sql noprint;
  15. select count(distinct name) into:  d from allvar;
  16. select name into:  m1 - : m%sysfunc(strip(&d.))  from allvar;
  17.    quit;

  18. %macro jj;
  19. %do i=1 %to &d.;
  20. proc sql noprint;
  21. select count(distinct &&m&i) into:  n&i from a;
  22.           quit;
  23. data a;
  24. set a;
  25. %if &&n&i.=1 %then %do;drop &&m&i.;%end;
  26. %end;
  27. run;
  28. %mend;
  29. %jj;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
pachong001 + 5 + 5 + 5 精彩帖子

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

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 13:15