楼主: heguima
4925 17

【每日一考】怎么编写一个宏,把一个变量的最大5个值和最小五个值列出来? [推广有奖]

  • 1关注
  • 0粉丝

已卖:15份资源

硕士生

31%

还不是VIP/贵宾

-

威望
0
论坛币
739 个
通用积分
0.1200
学术水平
4 点
热心指数
12 点
信用等级
2 点
经验
229 点
帖子
152
精华
0
在线时间
122 小时
注册时间
2013-6-19
最后登录
2017-9-27

楼主
heguima 发表于 2014-12-29 10:11:14 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
一个数据集如下
data test;
input x y z ;
cards;
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
19 20 21
22 23 24
25 26 27
28 29 30
31 32 33
34 35 36
;
run;

如何编一个宏程序,把x的最大五个值(34、31、28、25、22)和最小五个值(1、4、7、10、13)选出来

扩展:一个宏程序把x、y、z各自的最大最小五个值找出来,既x最大五个值为····,最小五个值为·····,y最大五个值为····,最小五个值为····
二维码

扫码加我 拉你入群

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

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

关键词:Input cards Data test card 程序 如何

回帖推荐

mingfeng07 发表于14楼  查看完整内容

mingfeng07 发表于8楼  查看完整内容

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

Try this:

沙发
bidgrqc 发表于 2014-12-29 10:37:38
如果在excel里面max和mix就搞定了,不知道为什么还要编宏,而且你还要设定范围,不能通用,叫做事倍功半。不如直接用这个函数,可以用于数组和排列 。

藤椅
teqel 发表于 2014-12-29 10:49:23
参考Cody’s Data Cleaning Techniques Using SAS pp.34-35
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
heguima + 1 + 1 + 1 精彩帖子

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

板凳
Tigflanker 发表于 2014-12-29 11:11:46
Try this:
  1. data test;
  2. input x y z ;
  3. cards;
  4. 7 8 9
  5. 34 35 36
  6. 10 11 12
  7. 1 2 3
  8. 19 20 21
  9. 22 23 24
  10. 4 5 6
  11. 25 26 27
  12. 13 14 15
  13. 28 29 30
  14. 16 17 18
  15. 31 32 33
  16. ;
  17. run;

  18. %let rc = %sysfunc(open(test));
  19. %let N = %sysfunc(attrn(&rc., nobs));
  20. %let rc = %sysfunc(close(&rc.));

  21. proc transpose data = test out = want;
  22. run;

  23. data want(keep = _name_ col1 - col5 col%eval(&N. - 4) - col&N.);
  24.   set want;

  25.   call sortn(of col:);
  26. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
heguima + 1 + 1 + 1 精彩帖子

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

报纸
heguima 发表于 2014-12-29 11:51:50
Tigflanker 发表于 2014-12-29 11:11
Try this:
amazing,跟我之前想的先把X排序,再transpose,再选前五个和后五个思想差不多,不过这位大神的实现方法简单多了,而且能一次性实现所有变量。大家还有其他思路也可以一起讨论一下,交流才能进步!

地板
teqel 发表于 2014-12-29 12:17:47
heguima 发表于 2014-12-29 11:51
amazing,跟我之前想的先把X排序,再transpose,再选前五个和后五个思想差不多,不过这位大神的 ...
transpose慢,而且数据多了可能不行

7
823954913 发表于 2014-12-29 17:11:12


data test;
input x y z ;
cards;
7 8 9
34 35 36
10 11 12
1 2 3
19 20 21
22 23 24
4 5 6
25 26 27
13 14 15
28 29 30
16 17 18
31 32 33
;
run;

proc sql outobs=5 noprint;
create table top5 as select * from test order by x desc;
quit;

proc sql outobs=5 noprint;
create table low5 as select * from test order by x ;
quit;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
heguima + 1 + 1 + 1 精彩帖子

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

8
mingfeng07 学生认证  发表于 2014-12-29 20:54:49
  1. %macro test(lib,data);
  2. proc sql;
  3. create table a as select * from sashelp.vcolumn where libname=upcase("&lib") and memname=upcase("&data");
  4. quit;
  5. proc sql;
  6. select count(name) into:N from a;
  7. select name into:var1-:var%left(&N.) from a;
  8. select count(*) into:N_1 from &data.;
  9. quit;
  10. %do i=1 %to &N.;
  11. data b;
  12. set &data;
  13. keep &&var&i.;
  14. run;
  15. proc sort data=b;by &&var&i.;run;
  16. data c;
  17. set b;
  18. if _n_<=5 or _n_>=&N_1-4;
  19. run;
  20. %if &i.=1 %then %do;
  21. data want;
  22. set c;
  23. run;
  24. %end;
  25. %else %do;
  26. data want;
  27. set want;
  28. set c;
  29. run;
  30. %end;
  31. %end;
  32. %mend;
  33. %test(work,test);
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
heguima + 1 + 1 + 1 精彩帖子

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

9
jl60156 发表于 2014-12-30 00:00:56
%macro minmax5(dsin=,dsout=,var=, n=5);
proc sort data=&dsin out=temp1(keep=&var rename=(&var=&var._max5) where=(not missing(&var._max5))) nodupkey;
    by descending &var;
run;
proc sort data=&dsin out=temp2(keep=&var rename=(&var=&var._min5) where=(not missing(&var._min5))) nodupkey;
    by &var;
run;
data &dsout;
     set temp1 (obs=&n);
     set temp2 (obs=&n);
run;
%mend;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
heguima + 1 + 1 + 1 精彩帖子

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

10
heguima 发表于 2014-12-30 09:07:10
mingfeng07 发表于 2014-12-29 20:54
,小小的建议,可以把过程中的生成的文件删掉,只留最后结果文件。其实这道题有个小陷阱,大家都没考虑有文本变量的情况

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

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