楼主: ccgzl
12433 14

[原创博文] 求助,怎么用 SAS 对 极端值 处理? [推广有奖]

  • 1关注
  • 0粉丝

讲师

21%

还不是VIP/贵宾

-

威望
0
论坛币
492 个
通用积分
0.7000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
25857 点
帖子
230
精华
0
在线时间
692 小时
注册时间
2008-5-17
最后登录
2025-3-27

楼主
ccgzl 发表于 2010-6-27 11:02:42 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
在用SAS处理数据时需要对极端值进行处理,对 最大和最小的5%数据 进行重新赋值,分别 等于95%和5%的那个值,请问

这个程序要怎么写啊?用排序吗,还是有其他更简单的方法?

        谢谢各位了!!!
二维码

扫码加我 拉你入群

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

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

关键词:极端值 SAS处理数据 处理数据 程序

回帖推荐

crackman 发表于5楼  查看完整内容

data Crackman; do i=1 to 100; x=10.67+3.178*rannor(4); output; end; run; proc univariate data=Crackman ; var x; output out=Result pctlpts=0.5,99.5 pctlpre=per; run;

本帖被以下文库推荐

沙发
flutter88 发表于 2010-6-27 11:38:46
用proc means或者proc univariate求出95%和5%的值,然后进行处理

藤椅
ccgzl 发表于 2010-6-27 12:32:31
试了下,好像只能算 p1 和 p99的,换成p0.5和 p99.5 就跑不出来啊?

板凳
flutter88 发表于 2010-6-27 13:25:12
ccgzl 发表于 2010-6-27 12:32
试了下,好像只能算 p1 和 p99的,换成p0.5和 p99.5 就跑不出来啊?
用proc univariate

报纸
crackman 发表于 2010-6-27 16:51:41
data Crackman;
do i=1 to 100;
x=10.67+3.178*rannor(4);
output;
end;
run;
proc univariate data=Crackman ;
var x;
output out=Result pctlpts=0.5,99.5  pctlpre=per;
run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

地板
ccgzl 发表于 2010-6-28 00:42:45
多谢了,又学到了很多,呵呵

7
BraveMadMan 发表于 2010-6-28 02:45:34
这个macro很好用

来源:http://ihome.cuhk.edu.hk/~b121456/tools.html
  1. /**********************************************************
  2. Purpose: trim or winsorize SAS dataset to remove the impact from extreme values

  3. Input
  4. dsetin  : dataset to winsorize/trim
  5. byvar   : define subset to winsorize/trim,e.g. 'date'. type 'none' for the whole dataset
  6. type    : 'delete' or 'winsor' (delete will trim, winsor will winsorize
  7. vars    : subsetting variables to winsorize/trim on; type 'none for no byvar
  8. pctl    : the percenagte of left and right tails to trim/winsorize

  9. Output
  10. dsetout : dataset to output with winsorized/trimmed values
  11. ************************************************************/

  12. %macro winsor(dsetin=, dsetout=, byvar=none, vars=, type=winsor, pctl=5 95);

  13. %if &dsetout = %then %let dsetout = &dsetin;
  14.    
  15. %let varL=;
  16. %let varH=;
  17. %let xn=1;

  18. %do %until ( %scan(&vars,&xn)= );
  19.     %let token = %scan(&vars,&xn);
  20.     %let varL = &varL &token.L;
  21.     %let varH = &varH &token.H;
  22.     %let xn=%EVAL(&xn + 1);
  23. %end;

  24. %let xn=%eval(&xn-1);

  25. data xtemp;
  26.     set &dsetin;
  27.     run;

  28. %if &byvar = none %then %do;

  29.     data xtemp;
  30.         set xtemp;
  31.         xbyvar = 1;
  32.         run;

  33.     %let byvar = xbyvar;

  34. %end;

  35. proc sort data = xtemp;
  36.     by &byvar;
  37.     run;

  38. proc univariate data = xtemp noprint;
  39.     by &byvar;
  40.     var &vars;
  41.     output out = xtemp_pctl PCTLPTS = &pctl PCTLPRE = &vars PCTLNAME = L H;
  42.     run;

  43. data &dsetout;
  44.     merge xtemp xtemp_pctl;
  45.     by &byvar;
  46.     array trimvars{&xn} &vars;
  47.     array trimvarl{&xn} &varL;
  48.     array trimvarh{&xn} &varH;

  49.     do xi = 1 to dim(trimvars);

  50.         %if &type = winsor %then %do;
  51.             if not missing(trimvars{xi}) then do;
  52.               if (trimvars{xi} < trimvarl{xi}) then trimvars{xi} = trimvarl{xi};
  53.               if (trimvars{xi} > trimvarh{xi}) then trimvars{xi} = trimvarh{xi};
  54.             end;
  55.         %end;

  56.         %else %do;
  57.             if not missing(trimvars{xi}) then do;
  58.               if (trimvars{xi} < trimvarl{xi}) then delete;
  59.               if (trimvars{xi} > trimvarh{xi}) then delete;
  60.             end;
  61.         %end;

  62.     end;
  63.     drop &varL &varH xbyvar xi;
  64.     run;

  65. %mend winsor;
复制代码
已有 3 人评分学术水平 热心指数 信用等级 收起 理由
cufejinrong + 1 + 1 + 1 奖励积极上传好的资料
rasun + 1 + 1 受教了,谢谢
peijiamei + 3 + 3 好的意见建议

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

Don't get lost in technical details. What is the big picture?

8
cufejinrong 发表于 2011-11-4 17:35:00
BraveMadMan 发表于 2010-6-28 02:45
这个macro很好用

来源:http://ihome.cuhk.edu.hk/~b121456/tools.html
好人啊!正需要呢!!!

9
liuywustb 发表于 2011-11-5 19:36:40
其实也可以求出5%的样本数是a,然后用winsorized=a

10
豆妮笑笑 发表于 2013-3-16 14:16:41
BraveMadMan 发表于 2010-6-28 02:45
这个macro很好用

来源:http://ihome.cuhk.edu.hk/~b121456/tools.html
是直接复制粘贴吗?为什么用过了没有效果?

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

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