请选择 进入手机版 | 继续访问电脑版
楼主: Tigflanker
1224 2

[原创博文] SAS递归实现快速排序 [推广有奖]

  • 8关注
  • 18粉丝

副教授

49%

还不是VIP/贵宾

-

威望
0
论坛币
2321 个
通用积分
9.8528
学术水平
179 点
热心指数
194 点
信用等级
167 点
经验
27443 点
帖子
622
精华
0
在线时间
851 小时
注册时间
2011-3-27
最后登录
2023-5-14

Tigflanker 发表于 2018-4-11 11:00:23 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
看到python一个简洁的快排,觉得思路好生清晰,立刻翻译了一下,发上来

  1. /* 子宏 用途是将输入的值串按照标杆值进行筛选 */
  2. %macro fliter(align,listf,sign);
  3. %let temp = ;
  4. %do %while(%length(&listf.));
  5.   %if %sysevalf(%scan(&listf.,1,%str( )) &sign. &align.) %then %let temp = &temp. %scan(&listf.,1,%str( ));
  6.   %if %sysfunc(countw(&listf.,%str( ))) > 1 %then %let listf = %substr(&listf, %length(%scan(&listf,1,%str( ))) + 1);
  7.   %else %let listf = ;
  8. %end;
  9. &temp.
  10. %mend fliter;

  11. /* 递归主体 值串进值串出 */
  12. %macro quick_sortx(list);
  13. %if %length(&list.) %then %let list = %sysfunc(compbl(&list.)); * 规整格式 ;

  14. %if %sysfunc(countw(&list.,%str( ))) <= 1 %then &list.; * 迭代落地条件 ;
  15. %else %do;
  16.   %quick_sortx(%fliter(%scan(&list,1,%str( )), %substr(&list,%length(%scan(&list,1,%str( ))) + 1),<))
  17.   %scan(&list,1,%str( ))
  18.   %quick_sortx(%fliter(%scan(&list,1,%str( )), %substr(&list,%length(%scan(&list,1,%str( ))) + 1),>=))
  19. %end;
  20. %mend quick_sortx;

  21. %put %sysfunc(compbl(%quick_sortx(  6 5 4   7.5 3 -7 2    10 9 7 -1.1 -1.2 6 8)));
复制代码

子宏应该可以精简的,不过好久不用SAS了,没想到什么好方法;就当小练手吧

参考思路(python快排):
  1. quick_sort = lambda array: array if len(array) <= 1 else quick_sort([item for item in array[1:] if item <= array[0]]) + [array[0]] + quick_sort([item for item in array[1:] if item > array[0]])  
复制代码


二维码

扫码加我 拉你入群

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

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

关键词:sysfunc length countw SUBSTR python

已有 1 人评分热心指数 收起 理由
eijuhz + 1 精彩帖子

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

Bye SAS.
若有缘,能重聚。
苹果叶 在职认证  发表于 2018-4-13 22:32:35 |显示全部楼层 |坛友微信交流群
厉害,从来没想过用sas 做递归的动作
已有 1 人评分论坛币 收起 理由
Tigflanker + 5 其实我也看不到更多用途

总评分: 论坛币 + 5   查看全部评分

使用道具

lira12 发表于 2018-4-14 02:52:06 |显示全部楼层 |坛友微信交流群
所以还是python更强
已有 1 人评分论坛币 收起 理由
Tigflanker + 2 各有各的擅长领域吧

总评分: 论坛币 + 2   查看全部评分

使用道具

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

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

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

GMT+8, 2024-3-29 02:09