楼主: yakilili
13931 10

[学术与投稿] 请教Winsorize的方法 [推广有奖]

  • 0关注
  • 0粉丝

小学生

14%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
97 点
帖子
4
精华
0
在线时间
5 小时
注册时间
2008-10-22
最后登录
2014-5-6

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
烦请各位高手指点一下Winsorize数据的方法,用SPSS能做吗?SAS的程序是怎样的?急啊,谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:Winsorize winsor wins SOR Win 请教 Winsorize

沙发
poetony 发表于 2009-10-3 20:25:56 |只看作者 |坛友微信交流群
1# yakilili

使用道具

藤椅
poetony 发表于 2009-10-3 20:26:12 |只看作者 |坛友微信交流群
/**********************************************************
Purpose: trim or winsorize SAS dataset to remove the impact from extreme values

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

Output
dsetout : dataset to output with winsorized/trimmed values
************************************************************/

%macro winsor(dsetin=, dsetout=, byvar=none, vars=, type=winsor, pctl=1 99);

%if &dsetout = %then %let dsetout = &dsetin;
   
%let varL=;
%let varH=;
%let xn=1;

%do %until ( %scan(&vars,&xn)= );
    %let token = %scan(&vars,&xn);
    %let varL = &varL &token.L;
    %let varH = &varH &token.H;
    %let xn=%EVAL(&xn + 1);
%end;

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

data xtemp;
    set &dsetin;
    run;

%if &byvar = none %then %do;

    data xtemp;
        set xtemp;
        xbyvar = 1;
        run;

    %let byvar = xbyvar;

%end;

proc sort data = xtemp;
    by &byvar;
    run;

proc univariate data = xtemp noprint;
    by &byvar;
    var &vars;
    output out = xtemp_pctl PCTLPTS = &pctl PCTLPRE = &vars PCTLNAME = L H;
    run;

data &dsetout;
    merge xtemp xtemp_pctl;
    by &byvar;
    array trimvars{&xn} &vars;
    array trimvarl{&xn} &varL;
    array trimvarh{&xn} &varH;

    do xi = 1 to dim(trimvars);

        %if &type = winsor %then %do;
            if not missing(trimvars{xi}) then do;
              if (trimvars{xi} < trimvarl{xi}) then trimvars{xi} = trimvarl{xi};
              if (trimvars{xi} > trimvarh{xi}) then trimvars{xi} = trimvarh{xi};
            end;
        %end;

        %else %do;
            if not missing(trimvars{xi}) then do;
              if (trimvars{xi} < trimvarl{xi}) then delete;
              if (trimvars{xi} > trimvarh{xi}) then delete;
            end;
        %end;

    end;
    drop &varL &varH xbyvar xi;
    run;

%mend winsor;

使用道具

板凳
dreamingboy7 发表于 2010-5-26 17:10:18 |只看作者 |坛友微信交流群
什么是winsorise 原理是啥?

使用道具

报纸
萧佳茗 发表于 2013-4-1 16:51:21 |只看作者 |坛友微信交流群
dreamingboy7 发表于 2010-5-26 17:10
什么是winsorise 原理是啥?
Winsorize的原理:如果一个样本某变量的值大于该变量的99分位数,则该样本的值被强制指定为99分位数的值;类似的,如果一个样本某变量的值小于该变量的1分位数,则该样本该变量的值被强制指定为1分位数。

使用道具

地板
凡尘梦1990 学生认证  发表于 2013-10-21 11:41:41 |只看作者 |坛友微信交流群
受教了!
就这样吧。

使用道具

7
Joycelyn小乔 学生认证  发表于 2014-1-8 22:06:40 |只看作者 |坛友微信交流群
stata可以,用winsor 命令
winsor var1, gen(var11) p(.05)
最好的投资就是你用尽全部解数对 ...

使用道具

8
06105007 发表于 2014-8-9 10:56:38 |只看作者 |坛友微信交流群
肿么我看到代码就晕乎乎

使用道具

9
蕴藻 发表于 2014-9-4 10:46:00 |只看作者 |坛友微信交流群
Joycelyn小乔 发表于 2014-1-8 22:06
stata可以,用winsor 命令
winsor var1, gen(var11) p(.05)
怎么安装WINSORIZE呢。我用Findit winsorize 没有找到可以安装的?谢谢
已有 1 人评分论坛币 收起 理由
yangyuzhou + 12 我也很感兴趣

总评分: 论坛币 + 12   查看全部评分

使用道具

10
matlab-007 发表于 2015-8-17 10:07:34 |只看作者 |坛友微信交流群
这是SAS的方法
data a;
do i=1 to 200;
x=ranuni(0);
output;
end;
run;
proc univariate data=a noprint;
var x;
output out=b pctlpts=1 pctlpts=99 pctlpre=p_;
run;
data c;
set a;
if (_n_=1) then set b;
if x gt p_99 then y=p_99;
else if x lt p_1 then x=p_1;
else y=x;
run;

使用道具

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

本版微信群
加JingGuanBbs
拉您进交流群

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

GMT+8, 2024-5-1 05:44