楼主: juicejune
226 4

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

  • 2关注
  • 0粉丝

本科生

45%

还不是VIP/贵宾

-

威望
0
论坛币
1138 个
通用积分
5.0005
学术水平
3 点
热心指数
3 点
信用等级
3 点
经验
2130 点
帖子
58
精华
0
在线时间
115 小时
注册时间
2018-4-16
最后登录
2019-9-11

juicejune 发表于 2019-6-25 15:44:34 |显示全部楼层
如题,想直接输出多个变量,如身高,体重,BMI等多种指标的前20个值和后20个值,不是p5,p95那种百分位数,不知道可以用什么指令,路过的大神有没有什么建议呢?

回帖推荐

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

(1)分别按照身高体重等升序排序 使用OBS选项可以获得前面多少个观测 获得前20的数据 (2)再分别按照身高体重等降序排序 使用OBS选项可以获得前面多少个观测 获得后20位的数据
stata SPSS
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 的建议!
回复

使用道具 举报

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

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

GMT+8, 2019-9-22 14:45