楼主: 一眼瞬间
4565 10

困扰,恳请高手帮助! rank问题 [推广有奖]

  • 0关注
  • 1粉丝

讲师

50%

还不是VIP/贵宾

-

威望
0
论坛币
730 个
通用积分
0.0001
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
903 点
帖子
376
精华
0
在线时间
309 小时
注册时间
2010-3-14
最后登录
2023-8-19

楼主
一眼瞬间 发表于 2010-11-12 04:10:30 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我用了这样一个macro rank,
%macro decile(dsn,var,decilevar);

/* calculate the cutpoints for the quintiles */
proc univariate noprint data=&dsn;
  var &var;
  output out=decile pctlpts=10 20 30 40 50 60 70 80 90 pctlpre=pct;
run;


/* write the quintiles to macro variables */
data _null_;
set decile;
call symput('q1',pct10) ;
call symput('q2',pct20) ;
call symput('q3',pct30) ;
call symput('q4',pct40) ;
call symput('q5',pct50) ;
call symput('q6',pct60) ;
call symput('q7',pct70) ;
call symput('q8',pct80) ;
call symput('q9',pct90) ;
run;

/* create the new variable in the main dataset */
data &dsn;
set &dsn;
       if &var =. then &decilevar = .;
  else if &var le &q1 then &decilevar=0.1;
  else if &var le &q2 then &decilevar=0.2;
  else if &var le &q3 then &decilevar=0.3;
  else if &var le &q4 then &decilevar=0.4;
  else if &var le &q5 then &decilevar=0.5;
  else if &var le &q6 then &decilevar=0.6;
  else if &var le &q7 then &decilevar=0.7;
  else if &var le &q8 then &decilevar=0.8;
  else if &var le &q9 then &decilevar=0.9;
  else &decilevar=1;
run;

%mend decile;
-------------------------------------------------
我感觉最后rank 打分出来应该是小于等于0.5的obs个数,和0.5 到1的样本个数是差不多的。
但是为什么在0.5的两端样本个数差别好大啊。这是为什么呢?一个边是5000左右,一边是15000左右


-----------------------------

对全样本做了个proc means; var rank;发现median也不是5.5. 是不是用proc univariate rank,本身就容易有问题?还是我哪里出了问题?
The MEANS Procedure

                             Analysis Variable : rank

                  Mean          Median         Maximum         Minimum         Std Dev
          ----------------------------------------------------------------------------
             0.5499870       0.6000000       1.0000000       0.1000000       0.2872285
二维码

扫码加我 拉你入群

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

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

关键词:Rank RAN Univariate Procedure cutpoints 高手 Rank 困扰

沙发
一眼瞬间 发表于 2010-11-12 04:15:02
难道我rank的方法错了?

藤椅
jingju11 发表于 2010-11-12 07:13:54
程序没有问题啊。我猜原因是重复值很多。比如说,pct10 = pct20. 从你的程序来讲,pct20就没有对应的分数值了。因此排序的中值向左(?)移动。

板凳
liudeng2005 发表于 2010-11-12 09:22:20
不知道你什么原因,只发部分程序上来,也许你计算0.5左右的个数的时候出错了。
我就是我@!

报纸
一眼瞬间 发表于 2010-11-12 10:21:18
liudeng2005 发表于 2010-11-12 09:22
不知道你什么原因,只发部分程序上来,也许你计算0.5左右的个数的时候出错了。
这已经是全部程序了饿。。。我就差把数据发上来了,那太大了。

直接放个dsn进去,就能run了的。

好像说说proc univariate有问题。
也有可能是京剧大师说的问题。

地板
liudeng2005 发表于 2010-11-12 12:00:45
我感觉不会,3倍的差距,统计学上都不可能吧
我就是我@!

7
jingju11 发表于 2010-11-12 13:01:15
liudeng2005 发表于 2010-11-12 12:00
我感觉不会,3倍的差距,统计学上都不可能吧
同意。我是瞎猜的。不过中值是0.6.也就是说0.6的两边数量应相同。但是
试一试这个数据

data x;
input y@@; y =4-y;; cards;
1 1 1 1 1 1 1 1 1 1 1 1 1  2 2 2 2  3 3 3
;
run;
用以上的程序完成后, rank 小于0.5 的个数是20,大于0.5的个数是0,也就是说全部的数据 rank小于0.5. 所以对称是偶然,不对称是必然的。

数万甚至更多的数据是0-100之间的整数分数(我猜),之中60-85之间的分数必然更加密集。也就是说重复值的比例应该很高。而百分位的算法很依赖于如何处理对重复值,再加上作者特定的算法。所以很奇怪的结果也不是没有可能的。
京剧

8
一眼瞬间 发表于 2010-11-12 13:07:21
jingju11 发表于 2010-11-12 13:01
liudeng2005 发表于 2010-11-12 12:00
我感觉不会,3倍的差距,统计学上都不可能吧
同意。我是瞎猜的。不过中值是0.6.也就是说0.6的两边数量应相同。但是
试一试这个数据

data x;
input y@@; y =4-y;; cards;
1 1 1 1 1 1 1 1 1 1 1 1 1  2 2 2 2  3 3 3
;
run;
用以上的程序完成后, rank 小于0.5 的个数是20,大于0.5的个数是0,也就是说全部的数据 rank小于0.5.
这么说,我的程序,悲剧性的编错了?

好像说用proc rank比较不容易出错。我再试试看,主要是breakpoint。
如果是上面的那么多重复数据的话,其实这里的rank只有三个。

9
jingju11 发表于 2010-11-12 13:13:41
一眼瞬间 发表于 2010-11-12 13:07
jingju11 发表于 2010-11-12 13:01
liudeng2005 发表于 2010-11-12 12:00
我感觉不会,3倍的差距,统计学上都不可能吧
同意。我是瞎猜的。不过中值是0.6.也就是说0.6的两边数量应相同。但是
试一试这个数据

data x;
input y@@; y =4-y;; cards;
1 1 1 1 1 1 1 1 1 1 1 1 1  2 2 2 2  3 3 3
;
run;
用以上的程序完成后, rank 小于0.5 的个数是20,大于0.5的个数是0,也就是说全部的数据 rank小于0.5.
这么说,我的程序,悲剧性的编错了?

好像说用proc rank比较不容易出错。我再试试看,主要是breakpoint。
如果是上面的那么多重复数据的话,其实这里的rank只有三个。
别的不说,proc rank 要省事一些。

10
一眼瞬间 发表于 2010-11-12 13:20:59
Obs    y    decilevar    x

                                     1    3       0.4       6
                                     2    3       0.4       6
                                     3    3       0.4       6
                                     4    3       0.4       6
                                     5    3       0.4       6
                                     6    3       0.4       6
                                     7    3       0.4       6
                                     8    3       0.4       6
                                     9    3       0.4       6
                                    10    3       0.4       6
                                    11    3       0.4       6
                                    12    3       0.4       6
                                    13    3       0.4       6
                                    14    2       0.2       2
                                    15    2       0.2       2
                                    16    2       0.2       2
                                    17    2       0.2       2
                                    18    1       0.1       0
                                    19    1       0.1       0
                                    20    1       0.1       0
我用macro和proc rank,做出来的结果。
果然是不一样,重复数据的原因吧。

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

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