楼主: juicejune
2256 4

[问答] 求助 SAS输出某个变量排序后的前20个和后20个观测 [推广有奖]

  • 3关注
  • 0粉丝

博士生

38%

还不是VIP/贵宾

-

威望
0
论坛币
3787 个
通用积分
41.8401
学术水平
29 点
热心指数
29 点
信用等级
29 点
经验
1012 点
帖子
118
精华
0
在线时间
423 小时
注册时间
2018-4-16
最后登录
2023-8-2

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
如题,想直接输出多个变量,如身高,体重,BMI等多种指标的前20个值和后20个值,不是p5,p95那种百分位数,不知道可以用什么指令,路过的大神有没有什么建议呢?
二维码

扫码加我 拉你入群

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

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

关键词:百分位数 多个变量 BMI 有没有 分位数

回帖推荐

glmswufe 发表于2楼  查看完整内容

(1)分别按照身高体重等升序排序 使用OBS选项可以获得前面多少个观测 获得前20的数据 (2)再分别按照身高体重等降序排序 使用OBS选项可以获得前面多少个观测 获得后20位的数据
沙发
glmswufe 发表于 2019-6-25 16:16:04 |只看作者 |坛友微信交流群
(1)分别按照身高体重等升序排序
使用OBS选项可以获得前面多少个观测
获得前20的数据
(2)再分别按照身高体重等降序排序
使用OBS选项可以获得前面多少个观测
获得后20位的数据
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 20 + 2 + 2 + 2 热心帮助其他会员
juicejune + 1 + 1 + 1 + 1 观点有启发

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

使用道具

藤椅
juicejune 发表于 2019-6-25 16:28:05 |只看作者 |坛友微信交流群
glmswufe 发表于 2019-6-25 16:16
(1)分别按照身高体重等升序排序
使用OBS选项可以获得前面多少个观测
获得前20的数据
谢谢回复,好像很可行,我去做一做!

使用道具

板凳
juicejune 发表于 2019-6-25 16:28:13 |只看作者 |坛友微信交流群
glmswufe 发表于 2019-6-25 16:16
(1)分别按照身高体重等升序排序
使用OBS选项可以获得前面多少个观测
获得前20的数据
谢谢回复,好像很可行,我去做一做!

使用道具

报纸
juicejune 发表于 2019-6-25 17:35:44 |只看作者 |坛友微信交流群
  1. %macro extreobs(dast,varlist);
  2. /*  Assign every variable from the VarList to a macro variable  */
  3. %let i=1;
  4. %let condition = 0;
  5.     %do %until (&condition =1);
  6.     %let Var&i=%scan(&VarList,&i);
  7.       %if "&&Var&i" ="" %then %let condition =1;
  8.       %else %let i = %Eval(&i+1);
  9.     %end;
  10. %let Nvars=%eval(&i-1);
  11. /*  Execution of the loop,selete the extreme values of every variable  */
  12. %do i=1 %to &Nvars;
  13.   proc means data=&dast mean median min max;
  14.     var &&Var&i;
  15.     output out=exval;
  16.   run;

  17.   proc sort data=&dast;
  18.        by &&Var&i;
  19.   run;
  20.   data min&&Var&i;set &dast(obs = 20);
  21.   run;

  22.   proc sort data=&dast;
  23.        by descending &&Var&i;
  24.   run;
  25.   data max&&Var&i;set &dast(obs = 20);
  26.   run;
  27. %end;
  28. %mend;

  29. /*使用*/
  30. %let dast=pe;
  31. %let varlist=j1b j1c j1d j1ev j1e1 j1e2 j1e3 j1a1;
  32. %extreobs(&dast,&varlist);
复制代码

我参考了论坛里一个删除极端值的宏,可以实现批量输出前后20个观测。再次感谢glmswufe 的建议!

使用道具

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

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

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

GMT+8, 2024-4-27 12:28