楼主: xiaotusheng
10452 6

[原创博文] [求助]如何在SAS中快速剔除两端的极端值 [推广有奖]

  • 0关注
  • 0粉丝

已卖:686份资源

本科生

66%

还不是VIP/贵宾

-

威望
0
论坛币
2522 个
通用积分
2.2450
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
509 点
帖子
35
精华
0
在线时间
155 小时
注册时间
2008-8-1
最后登录
2025-11-20

楼主
xiaotusheng 发表于 2009-2-26 18:44:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
<p>求助:如何在SAS中快速剔除两端1%和99%的极端值?将这些极端值设置为缺省值 </p>
二维码

扫码加我 拉你入群

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

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

关键词:极端值 缺省值 如何

回帖推荐

xiaotusheng 发表于4楼  查看完整内容

问题已经解决了,还是非常感谢为表感谢,我贴个macro Winso,用于解决极端值问题的很好的一个宏/*******************************************************************************Winsorize macro Can winsorize or trim at specified percentiles; dsetout = leave blank to overwrite dsetin byvar   = none for no byvar (trims/winsorizes pooled sample) type    = delete/wi ...

realgod5417 发表于3楼  查看完整内容

我 只会个笨蛋法!proc univiriate data=ex1;var tepvar1;output out=pctls pctlpts=1 99 pctlname=pct1 pct99;run;查看pctls中1和99的分位数然后在进行删除 [此贴子已经被作者于2009-2-27 10:47:18编辑过]

本帖被以下文库推荐

沙发
xiaotusheng 发表于 2009-2-26 22:12:00

没人顶一个~~~~

藤椅
realgod5417 发表于 2009-2-27 10:40:00

我 只会个笨蛋法!

proc univiriate data=ex1;

var tepvar1;

output out=pctls pctlpts=1 99 pctlname=pct1 pct99;

run;

查看pctls中1和99的分位数然后在进行删除

[em04][em04]

[此贴子已经被作者于2009-2-27 10:47:18编辑过]

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

梅须逊雪三分白雪却输梅一段香

板凳
xiaotusheng 发表于 2009-2-27 17:16:00

问题已经解决了,还是非常感谢

为表感谢,我贴个macro Winso,用于解决极端值问题的很好的一个宏

/*******************************************************************************
Winsorize macro
 Can winsorize or trim at specified percentiles;
 dsetout = leave blank to overwrite dsetin
 byvar   = none for no byvar (trims/winsorizes pooled sample)
 type    = delete/winsor
 ex: %winsor(dsetin=mydata, dsetout=mydata2, byvar=year, vars=assets earnings, pctl=0 98);
     winsorizes by year at 98%, puts resulting dataset into mydata2

     %winsor(dsetin=mydata, vars=assets earnings, type=delete);
     trims pooled sample at 1% and 99%, puts resulting dataset back into mydata
********************************************************************************/

%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;

%let dropvar = ;
%if &byvar = none %then %do;

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

    %let byvar = xbyvar;
    %let dropvar = 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 trimvars{xi} ne . 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 trimvars{xi} ne . then do;
              if (trimvars{xi} < trimvarl{xi}) then delete;
              if (trimvars{xi} > trimvarh{xi}) then delete;
            end;
        %end;

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

%mend winsor;

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

报纸
xujiantao 发表于 2010-2-24 14:20:01
如何用eviews spss stata 实现呢
Life is about choice.

地板
豆妮笑笑 发表于 2013-3-16 15:26:42
xiaotusheng 发表于 2009-2-27 17:16
问题已经解决了,还是非常感谢为表感谢,我贴个macro Winso,用于解决极端值问题的很好的一个宏/********** ...
能不能具体说说这个宏怎么用呢?我粘贴到程序中之后,跑出来的观测值一点都没有减少啊,哭……

7
shiyishibasui 发表于 2014-6-10 20:41:28
realgod5417 发表于 2009-2-27 10:40
我 只会个笨蛋法!proc univiriate data=ex1;var tepvar1;output out=pctls pctlpts=1 99 pctlname=pct1 pct ...
关键字错了univariate

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

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