楼主: maggie-fly
3737 1

sas winsorize 问题请教 [推广有奖]

  • 0关注
  • 1粉丝

已卖:348份资源

博士生

98%

还不是VIP/贵宾

-

威望
0
论坛币
1234 个
通用积分
2.7300
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4039 点
帖子
172
精华
0
在线时间
527 小时
注册时间
2009-9-14
最后登录
2025-12-19

楼主
maggie-fly 发表于 2012-4-2 08:06:31 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
下面是我运行的一段在网上copy的程序,但总是报错:

%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;
%winsor(dsetin=reg, dsetout=result, byvar=time, vars=size, type=winsor, pctl=1 99);



请问这样有问题吗,为什么总是提示:WARNING: The variable xbyvar in the DROP, KEEP, or RENAME list has never been referenced.

而且并没有给出winsorize的结果。谢谢各位了
二维码

扫码加我 拉你入群

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

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

关键词:Winsorize winsor wins SOR Win amp

沙发
zdw515 发表于 2013-8-22 18:27:24
WARNING: The variable xbyvar in the DROP, KEEP, or RENAME list has never been referenced.
程序中出现的问题引用之前没有重新定义,因此,有些无法引用而导致出错,winsorize其实不用这么麻烦,sas专栏里面有很多介绍的,可以搜索下

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

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