作者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/m.aspx?n=bbs/Statistics/M.1597328708.A.AF8.html
1F:推 woowolf: 我會試試的!! 08/14 08:48