作者west1996 ()
看板Statistics
标题Re: [程式] 关於SAS sorting的问题
时间Thu Aug 13 22:25:04 2020
※ 引述《woowolf (狼咩咩儿)》之铭言:
: [软体程式类别]:
: SAS
: [程式问题]:
: 资料处理
: [软体熟悉度]:
: 熟悉
: [问题叙述]:
: 想在一个资料里面sorting两次
: 资料如下:(我自己用了简单的范例)
: https://imgur.com/8ftZVTI
: 然後现在想要针对Cate1排序,排序的依据是Count的大小(desending)
: 排完之後保留这个排序,针对Cate2排序,排序的依据依旧是Count的大小(desending)
: 最後期望的结果是这样
: https://imgur.com/ukWVNGy
:
: [程式范例]:
:
: 之前天真的认为Proc sort 可以为我做到这件事
: 不过想想如果都是sort by Count的话好像不能分类sorting(?
: 於是又想了可以在proc sort 之後用first. Last.的方法去排序
: 遇到跟proc sort 一样的问题
: 於是又想 那要是依据类别拆开呢
: 先用proc SQL 把cate1拆开成animals 和 plants两个类别,
: 再去sort里面的cate2
: 最後拼起来之前再去比较cate1的cate大小
: 应该是可行没错(等等来试
: 但现在是只有Cate1只有两种类别,那要是Cate1有几十种类别呢
: 写进macro里让他重复拆拆拆拆然後比比比比最後合合合合?
:
这一题讨厌的点在於你的资料其实把两个不同颗粒度的资料列放在一起
一个是summary的count一个是detail的count
直观的想法要先把count根据颗粒度拆出来
不确定是否有更快的做法,但第一感的想法可能类似下面这样
proc sort data=old out=temp;
by cate1 descending count;
run;
data temp;
set temp;
by cate1;
retain count_subtotal;
if first.cate1=1 then count_subtotal=count;
run;
proc sort data=temp out=new(drop=count_subtotal);
by descending count_subtotal descending count;
run;
p.s. 排序逻辑是假设资料里的count都不会有负值,所以sum的一定最大,若有负值逻辑
要小修一下
p.s.2 凭空打的程式码,可能有错...
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.227.161.136 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Statistics/M.1597328708.A.AF8.html
1F:推 woowolf: 我会试试的!! 08/14 08:48