全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
17007 9
2014-08-05
如题,请教各位大神,如何用SAS对数据进行winsorize缩尾处理?最好能够提供详细的程序和注释,感激不尽!
二维码

扫码加我 拉你入群

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

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

全部回复
2014-8-7 00:31:40
有人编了宏的。http://www.wrds.us/index.php/repository/view/1

复制代码

使用举例:
复制代码


二维码

扫码加我 拉你入群

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

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

2014-8-7 17:36:53
chrisky 发表于 2014-8-7 00:31
有人编了宏的。http://www.wrds.us/index.php/repository/view/1
谢谢,我明白了
二维码

扫码加我 拉你入群

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

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

2016-3-16 21:32:06
二维码

扫码加我 拉你入群

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

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

2016-3-25 01:31:43
这个程序有点长啊,用起来也挺方便。但是分组winsorize有时候效果并不明显,写了个短一点的,仅供参考:
/*datain是输入数据集,dataout是目标数据集,varlist是需要winsorize的变量,用空格分隔,lower是下分位点,higher是上分位点*/
/*如%winsorize(alpha,beta,var1 var2 var3,10,90)将数据集alpha的变量var1,var2和var3winsorize处理,结果输出到beta*//*注意:本程序同上面程序最大的不同在于不按照截面对数据分组,而采用面板统一winsorize,避免组间差异过大,但是对样本量的损失非常严重,在10%的水平下,按照国泰安数据库中几个常用变量,会有近千只股票损失*/
%macro winsorize(datain,dataout,varlist,lower,higher);
proc univariate data=&datain;
var &varlist.;
output out=alpha pctlpts=&lower. &higher.  pctlpre= &varlist. pctlname=l h;
run;
%let num=%eval(%length(&varlist.)-%length(%sysfunc(compress(&varlist.)))+1);
data beta;
        set &datain.;
run;
%do i=1 %to #
%let token=%scan(&varlist.,&i.);
proc sql noprint;
        select &token.l into:tokenl
        from alpha;
        select &token.h into:tokenh
        from alpha;
quit;
data beta;
        set beta;
        if &token.<=&tokenl. then &token.=&tokenl.;
        if &token.>=&tokenh. then &token.=&tokenh.;
run;
%end;
data &dataout.;
        set beta;
run;
proc delete data=alpha beta;
run;
%put _user_;
%mend;



二维码

扫码加我 拉你入群

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

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

2016-10-9 15:04:09
chrisky 发表于 2014-8-7 00:31
有人编了宏的。http://www.wrds.us/index.php/repository/view/1
你好,我是一个菜鸟,想问一下如果要进行3%的缩尾,是不是要把宏第一行括号里面的pctl=1 99 改成pctl=3 97  就可以了? 程序中的其他部分还有哪里要修改??
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群