全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
11024 12
2013-03-18
请教论坛里SAS的高手,如何能够批量将变量剔除1%分位数以下和99%分位数以上的值,我之前看了论坛里的处理一个的方法是
data t1;
do id=1 to 20;
   x=ranuni(1223);
    output;
end;
run;

proc means data=t1 mean median;
  var x ;
  output out=exval p1=p1 p99=p99;
run;

proc sql;
  create table t2 as
  select a.* from t1 as a
  where a.x > ( select p1 from exval) and a.x < ( select p99 from exval);
  quit;
proc print data=t2;
run;
很想知道当变量很多时,该如何处理呢,谢谢!LZ在学SAS时,实在很笨。。。


二维码

扫码加我 拉你入群

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

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

全部回复
2013-3-18 19:59:39
顶~好专业的东西啊~
二维码

扫码加我 拉你入群

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

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

2013-3-19 10:02:24
写一个宏,参数为(逻辑库,数据集,变量列表),宏功能模块如下:
1.将变量列表中的每个变量赋给一个宏变量,生成变量总数宏变量;
2.执行循环,对每个变量(也就是新生成的宏变量)统计出1%分位数和99%分位数(应用proc means过程);
3.剔除值,可以应用上面的proc sql过程,或者,将1%分位数和99%分位数分别赋给不同的宏变量,用if语句进行处理;
二维码

扫码加我 拉你入群

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

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

2013-3-19 13:56:07
如果是对多个变量做同样的重复操作,确实是用宏来实现。
1、定义宏变量 %let a=x;
2、引用宏变量,在proc means,与proc sql过程中, 用&a来代表x;
3、重复,只要把 a 定义为其他你需要研究的变量 y x z...., 就可自动实现proc means, proc sql 对 y, x, z.....的重复讨论了。
当然,数据库的名字要相应更改,以保存不同的结果。
二维码

扫码加我 拉你入群

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

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

2013-3-19 18:56:55
gaotao0727 发表于 2013-3-19 10:02
写一个宏,参数为(逻辑库,数据集,变量列表),宏功能模块如下:
1.将变量列表中的每个变量赋给一个宏变量 ...
谢谢您的回复,但可不可以说的比较详细一些呢,不好意思,我刚接触SAS没多久,水平还停留在简单的排序,删除上面,对宏还不了解,借的书上也没有专门讲宏的篇章,可否具体说一下该如何处理呢,我现在的变量有acc cf2009 cf2010 cf2008 dcf2009 dcfcf 这几个变量。非常谢谢您!
二维码

扫码加我 拉你入群

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

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

2013-3-19 18:58:07
hhtpku 发表于 2013-3-19 13:56
如果是对多个变量做同样的重复操作,确实是用宏来实现。
1、定义宏变量 %let a=x;
2、引用宏变量,在proc ...
谢谢您的回复,我试试呢,刚接触SAS,不太懂宏
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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