全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
9713 9
2010-04-26
一个dataset有很多个变量,其中有些变量的值对于所有记录都是0
怎样写代码,自动删除这些变量?
谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-4-26 09:49:42
我也想问关于观测的一些特殊属性怎样对变量进行修改
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-4-26 10:07:16

删除记录全为0的变量

data a;
input x y z h;
cards;
1 2 0 0
2 4 0 0
4 5 0 0
;
proc sql noprint;
select name into:vname separated by ' '
from dictionary.columns
where libname='WORK' and memname='A' and type='num';
quit;
%put &vname;
%macro zero;
%let i=1;
%do %while(%length(%scan(&vname,&i))>0);
%let name=%scan(&vname,&i);
proc sql noprint;         
select sum(&name) into :num
from a;
quit;
data a;
set a;
%if &num=0 %then %do;
drop &name;
%end;
run;
%let i=%eval(&i+1);
%end;
%mend;
%zero;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-4-26 12:05:16
全部用DATA步完成,不需要调用复杂的宏程序以及SQL,效率要高些。
data crackman;
fen="woody";
wodu="sinacom";
do i=1 to 100;
x=ranuni(90);
y=x*1.567;
z=x+y;
m=0;
output;
end;
run;
data a;
set crackman;
keep _numeric_;
call symput('obs',compress(attrn(open('work.a','i'),'nobs')));
run;
data b;
set crackman;
keep _character_;
run;
proc transpose data=a out=c;
var _all_;
run;
data c;
set c;
array s col1-col&obs.;
if col1-col&obs.^=0 then output;
run;
proc transpose data=c out=c;
ID _NAME_;
run;
data c;
set c;
drop _name_;
run;
data result;
merge  c b;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-4-26 13:56:04
如何保证结果变量的顺序和原表一样呢?这个把字符型提前了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-4-26 14:07:25
因为我的字符型变量值是一个值
所以转置的时候出现问题
如果不是一个值
也许可以直接转就可以了
不需要分字符型和数值型了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群