楼主: peijiamei
8519 7

[原创博文] 数据计算程序求助(百分位数) [推广有奖]

学科带头人

76%

还不是VIP/贵宾

-

威望
3
论坛币
26151 个
通用积分
12.3468
学术水平
217 点
热心指数
343 点
信用等级
210 点
经验
75410 点
帖子
1102
精华
1
在线时间
2016 小时
注册时间
2007-11-15
最后登录
2016-3-21

300论坛币
n(观测号)av(根据n和a计算)
10.1 
20.1 
30.1 
40.1 
50.2 
60.21-5样本区间a的95%百分位数
70.22-6样本区间a的95%百分位数
80.23-7样本区间a的。。
90.24-8的
100.75-9的
110.7。。
120.7。。
130.7。。
140.7。。
150.7。。
160.712-16样本区间a的95%的百分位数



根据n和a计算v。。。。


谢谢!
关键词:计算程序 百分位数 分位数 程序 样本

回帖推荐

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

2# soporaeternus 只要是前五个数,其在数组里的位置是无所谓的。如果要根据记录的位置求白分位,n值反而多余。 为了300币。。。当然交流第一。京剧

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

data have; input n a; cards; 1 0.1 2 0.1 3 0.1 4 0.1 5 0.2 6 0.2 7 0.2 8 0.2 9 0.2 10 0.7 11 0.7 12 0.7 13 0.7 14 0.7 15 0.7 16 0.7 ; %macro lags(var,n); lag(&var) %do i=2 %to &n; ,lag&i(&var) %end; %mend; data wanted; set have; v=pctl(95,%lags(a,5)); if _n_

本帖被以下文库推荐

沙发
soporaeternus 发表于 2010-11-18 17:35:30 |只看作者 |坛友微信交流群
  1. data b;
  2.         retain x1-x6;
  3.         set a;
  4.         array xx[6] x1-x6;
  5.         do i=6 to 2 by -1;
  6.                 xx[i]=xx[i-1];
  7.         end;
  8.         xx[1]=a;
  9.         if _N_ >= 6 then do;
  10.                 v=pctl(95,of x2-x6);
  11.                 sum=sum(of x2-x6);
  12.                 max=max(of x2-x6);
  13.                 min=min(of x2-x6);
  14.         end;
  15.         drop x1-x6 i;       
  16. run;
复制代码
求教:聚合函数对于临时数组怎么写啊?
一时写不出来没用临时数组......
我只会用宏把临时数组显式化来写在聚合函数里面......
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
pobel + 1 + 1 + 1 精彩帖子
hopewell + 1 + 1 + 1 我很赞同

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

Let them be hard, but never unjust

使用道具

藤椅
pobel 在职认证  发表于 2010-11-18 17:36:31 |只看作者 |坛友微信交流群
data have;
   input n a;
   cards;
1 0.1
2 0.1
3 0.1
4 0.1
5 0.2
6 0.2
7 0.2
8 0.2
9 0.2
10 0.7
11 0.7
12 0.7
13 0.7
14 0.7
15 0.7
16 0.7
;

%macro lags(var,n);
   lag(&var)
   %do i=2 %to &n;
       ,lag&i(&var)
   %end;
%mend;

data wanted;
    set have;
    v=pctl(95,%lags(a,5));       
    if _n_<=5 then call missing(v);
run;


data test;
    do n=1 to 10000;
           a=ranuni(0);
           output;
        end;
run;

data testl;
     set test;
    v=pctl(95,%lags(a,100));       
    if _n_<=100 then call missing(v);
run;
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
hopewell + 1 + 1 + 1 我很赞同
论坛数据分析 + 300 精彩帖子

总评分: 论坛币 + 300  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

和谐拯救危机

使用道具

板凳
jingju11 发表于 2010-11-19 05:49:52 |只看作者 |坛友微信交流群
2# soporaeternus
  1. data b;
  2.   set a;
  3.   array t{5} _temporary_;
  4. if _n_ >5 then v =pctl(95, of t[*] );
  5. t[5 -mod(_n_, 5)] =a;
  6. run;
复制代码
只要是前五个数,其在数组里的位置是无所谓的。如果要根据记录的位置求白分位,n值反而多余。
为了300币。。。当然交流第一。京剧
已有 5 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
crackman + 100 + 1 + 1 精彩帖子
pobel + 1 + 1 + 1 向高手学习!
hopewell + 1 + 1 + 1 我很赞同
soporaeternus + 1 + 1 + 1 惯性思维了,这个方法做移动窗口更好!!
论坛数据分析 + 300 精彩帖子

总评分: 论坛币 + 400  学术水平 + 4  热心指数 + 4  信用等级 + 3   查看全部评分

使用道具

报纸
jingju11 发表于 2010-11-19 05:56:55 |只看作者 |坛友微信交流群
16 0.7 12-16样本区间a的95%的百分位数
本文来自: 人大经济论坛 SAS专版 版,详细出处参考:http://www.pinggu.org/bbs/viewthread.php?tid=964816&page=1&from^^uid=1032463

按照规律,16 0.7 12-16样本区间a的95%的百分位数,
12-16应该为11-15才对。
已有 1 人评分热心指数 收起 理由
论坛数据分析 + 1 我很赞同

总评分: 热心指数 + 1   查看全部评分

使用道具

地板
soporaeternus 发表于 2010-11-19 09:33:28 |只看作者 |坛友微信交流群
京剧前辈,
的确,我做移动窗口方法太繁琐,在求和,求百分位数等方法上,不需要刻意保留之前数据的顺序,看了您的方法,简单高效,受益匪浅。多谢!
现在还有个问题,在我运行if _n_ >5 then v =pctl(95, of t[*] );这句的时候,还是报错
ERROR: ARRAYNAME[*] 说明要求基于数组的变量。
我用非临时数组的话,就没有这个问题,就如我之前问的那样。我不知道对于临时数组应该怎样用聚合函数
还是您使用的是9.2,这是9.2的新特性.......
望赐教,十分感谢
Let them be hard, but never unjust

使用道具

7
jingju11 发表于 2010-11-19 11:27:28 |只看作者 |坛友微信交流群
6# soporaeternus
不敢当。HOPELWELL,你知道其中的缘故吗?我用的是9.22
使用pobel的test数据(较小的数据集),结果如下

580  data test;
581      do n=1 to 100;
582             a=ranuni(1);
583             output;
584          end;
585  run;
NOTE: The data set WORK.TEST has 100 observations and 2 variables.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds

586
587
data b;
589     set test;
590     array t{5} _temporary_;
591     if _n_ >5 then v =pctl(95, of t
  • );
    592     t[5 -mod(_n_, 5)] =a;
    593  run;
    NOTE: There were 100 observations read from the data set WORK.TEST.
    NOTE: The data set WORK.B has 100 observations and 3 variables.
    NOTE: DATA statement used (Total process time):
          real time           0.03 seconds
          cpu time            0.03 seconds

    不知道为什么总是贴不好。
  • 已有 1 人评分学术水平 热心指数 收起 理由
    peijiamei + 2 + 2 好的意见建议

    总评分: 学术水平 + 2  热心指数 + 2   查看全部评分

    使用道具

    8
    lycanthropeman 学生认证  发表于 2018-1-21 12:00:35 |只看作者 |坛友微信交流群
    怎么求百分位,就是一个变量的所有值的百分位怎么求?

    使用道具

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

    本版微信群
    加好友,备注cda
    拉您进交流群

    京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

    GMT+8, 2024-4-20 03:14