楼主: 战士1009
11122 12

[问答] 求助SAS如何批量剔除变量的极端值 [推广有奖]

  • 0关注
  • 1粉丝

已卖:25份资源

博士生

84%

还不是VIP/贵宾

-

威望
0
论坛币
3692 个
通用积分
86.8503
学术水平
2 点
热心指数
13 点
信用等级
1 点
经验
4168 点
帖子
148
精华
0
在线时间
528 小时
注册时间
2011-4-13
最后登录
2024-5-16

楼主
战士1009 在职认证  发表于 2013-3-18 19:38:55 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请教论坛里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时,实在很笨。。。


二维码

扫码加我 拉你入群

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

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

关键词:剔除变量 极端值 proc sql Select output 如何

沙发
jiaqian900727 发表于 2013-3-18 19:59:39
顶~好专业的东西啊~

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

板凳
hhtpku 发表于 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.....的重复讨论了。
当然,数据库的名字要相应更改,以保存不同的结果。

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

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

7
luijb 在职认证  发表于 2013-3-19 23:53:57
剔除异常值,涉及到算法问题,按照分位数来剔除并不合理。

即使无异常数据点,按照分位数发,也会被踢除一些的,没有实际意义。
西格玛临床统计服务工作室http://www.sigma-stat.com/,luijb@163.com

8
hhtpku 发表于 2013-3-20 11:26:38
luijb 发表于 2013-3-19 23:53
剔除异常值,涉及到算法问题,按照分位数来剔除并不合理。

即使无异常数据点,按照分位数发,也会被踢除 ...
有道理,建议用哪种算法呢?

9
gaotao0727 发表于 2013-3-20 11:26:51
战士1009 发表于 2013-3-19 18:56
谢谢您的回复,但可不可以说的比较详细一些呢,不好意思,我刚接触SAS没多久,水平还停留在简单的排序,删 ...
  1. /* Description of parameters
  2. Lib:library
  3. DSin:dataset
  4. VarList:the List of variables
  5. */
  6. %macro ExtreDel(Lib,DSin,VarList);
  7. /*  Assign every variable from the VarList to a macro variable  */
  8. %let i=1;
  9. %let condition = 0;
  10.     %do %until (&condition =1);
  11.     %let Var&i=%scan(&VarList,&i);
  12.       %if "&&Var&i" ="" %then %let condition =1;
  13.       %else %let i = %Eval(&i+1);
  14.     %end;
  15. %let Nvars=%eval(&i-1);
  16. /*  Execution of the loop,delete the extreme values of every variable  */
  17. %do i=1 %to &Nvars;
  18.   proc means data=&Lib..&DSin mean median;
  19.     var &&Var&i;
  20.     output out=exval p1=p1 p99=p99;
  21.   run;

  22.   proc sql;
  23.     select p1,p99 into :p1V,:p99V from exval;
  24.   quit;

  25.   %put &p1V;

  26.   data &Lib..&DSin;
  27.     set &Lib..&DSin;
  28.     if &&Var&i > &p1V and &&Var&i < &p99V;
  29.   run;
  30. %end;

  31. proc datasets library=work nodetails nolist;
  32.   delete exval;
  33. quit;
  34. %mend;

  35. /*  One Example
  36. %let Lib=work;
  37. %let DSin=test;
  38. %let VarList=acc cf2009 cf2010 cf2008 dcf2009 dcfcf;
  39. %ExtreDel(&Lib,&DSin,&VarList);
  40. */
复制代码
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
liqiming + 1 + 1 + 1 精彩帖子
战士1009 + 1 + 1 + 1 谢谢您这么详细的解答,谢谢!

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

衣带渐宽终不悔,为伊消得人憔悴~~

10
红通通 发表于 2016-8-11 13:47:10
gaotao0727 发表于 2013-3-20 11:26
高手大赞啊!如何能达到写出这程序的水平啊?可否推荐一些资料学习下?多谢啦!

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

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