楼主: Imasasor
1555 7

[原创博文] 如何将某个变量的最大和最小1%数据变缺失 [推广有奖]

  • 1关注
  • 64粉丝

VIP

已卖:215份资源

学科带头人

33%

还不是VIP/贵宾

-

TA的文库  其他...

超哥喜欢的文章

威望
1
论坛币
47033 个
通用积分
3.1376
学术水平
238 点
热心指数
246 点
信用等级
231 点
经验
37132 点
帖子
849
精华
3
在线时间
2235 小时
注册时间
2012-7-4
最后登录
2024-10-10

初级学术勋章 初级热心勋章 初级信用勋章 中级热心勋章 中级学术勋章

楼主
Imasasor 发表于 2012-7-15 18:05:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
不要对变量sort,然后取最大和最小的1%观测,我有很多变量,数据也很大,sort太慢。最好谁能给个宏程序,对任何变量都可以做的,求高手
二维码

扫码加我 拉你入群

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

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

关键词:SOR 求高手 多变量 宏程序 如何 程序 最好

沙发
maidenhan 发表于 2012-7-16 09:13:13
data temp01;
        do id = 1 to 10000;
                v = ceil(rannor(0)*10);
                output;
        end;
run;

%macro data_sampling(var, top_or_bottom_flg, percent);
proc sql;
        drop table temp02;
        drop table temp03;
quit;
data _null_;
        set temp01 nobs=n;
        call symputx('n', max(1, floor(n*&percent.)) );
        stop;
run;
%do ii = 1 %to &n.;
        %if &ii. = 1 %then %do;
                data temp02(keep = a b);
                        retain a;
                        retain b;
                        set temp01 end=eof;
                        if _n_ = 1 then do;
                                a = id;
                                b = v;
                        end;else do;
                                %if "&top_or_bottom_flg." = "top" %then %do;
                                if b < v then do;
                                        a = id;
                                        b = v;
                                end;
                                %end;%else %do;
                                if b > v then do;
                                        a = id;
                                        b = v;
                                end;
                                %end;
                        end;
                        if eof then output;
                run;
                proc append base = temp03 data = temp02; run;
        %end;%else %do;
                data temp02(keep = a b);
                        retain a;
                        retain b;
                        if 0 then set temp03(keep = a);
                        if _n_ = 1 then do;
                                dcl hash h(dataset:"temp03");
                                h.definekey("a");
                                h.definedone();
                        end;
                        set temp01 end=eof;
                        if h.check(key:id) then do;
                                if _n_ = 1 then do;
                                        a = id;
                                        b = v;
                                end;else do;
                                        %if "&top_or_bottom_flg." = "top" %then %do;
                                        if b < v then do;
                                                a = id;
                                                b = v;
                                        end;
                                        %end;%else %do;
                                        if b > v then do;
                                                a = id;
                                                b = v;
                                        end;
                                        %end;
                                end;
                        end;
                        if eof then output;
                run;
                proc append base = temp03 data = temp02; run;
        %end;
%end;
%mend;

%data_sampling(var = v, top_or_bottom_flg = top, percent = 0.01);
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
jingju11 + 5 + 5 + 5 精彩帖子。受益匪浅。

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

藤椅
Imasasor 发表于 2012-7-16 09:18:32
maidenhan 发表于 2012-7-16 09:13
data temp01;
        do id = 1 to 10000;
                v = ceil(rannor(0)*10);
你是以前写好的还是现写的?
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

板凳
playmore 发表于 2012-7-16 09:34:23
你的要求就是做winsorize处理
可以把双尾处指定观测赋值或删除
坛子里就有相关的宏
你搜搜看,可以直接用
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

报纸
maidenhan 发表于 2012-7-16 09:39:15
Imasasor 发表于 2012-7-16 09:18
你是以前写好的还是现写的?
今天早上写的

地板
笑忘书21 发表于 2012-7-16 09:46:54
maidenhan 发表于 2012-7-16 09:39
今天早上写的
太牛啦。

7
jingju11 发表于 2012-7-16 10:35:23
playmore 发表于 2012-7-16 09:34
你的要求就是做winsorize处理
可以把双尾处指定观测赋值或删除
坛子里就有相关的宏
in terms of means, that is trimmed mean but not winsorized mean. jingju

8
playmore 发表于 2012-7-16 13:29:31
jingju11 发表于 2012-7-16 10:35
in terms of means, that is trimmed mean but not winsorized mean. jingju
嗯,我知道,坛子里有关于Winsorize的宏
里面有一个参数,可以选择把落在双尾的观测删掉或winsorized
若是选删掉应该符合lz的要求
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 23:42