→ frank1206:自己解決:加一排_n_,再排序即可。 03/26 17:37
不好意思又來麻煩各位幫我解惑一下了
之前的問題是要分成十組
雖然透過proc rank可以分成十個檔案
但是目前遇到一個問題
就是資料有太多筆是重複的
例如
a1 a2 a3
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7
8 8
9 9
9
9
9
9
9
9
9
這樣在使用proc rank分組的時候會產生一個問題
問題點在於rank會把同數字的分在同一組當中
這樣會有兩個地方出問題
(1)特定組別的資料筆數會特別少或特別多,例如說700筆資料當中有
400筆的值是1 200筆的值是0
這樣分十組的時候會變成
第一組 70個資料 (700/10)
第二組 30個資料 (只剩下30個資料能被在這組)
第三組 400個1
第四組 200個0
第五組到第十組沒有資料
(2)同上所述,有些組別的資料會是空的
目前想到的可能解決辦法是設立一個 變數n = 每欄的樣本數(每個欄位的資料數並不固定)
然後將一欄資料拆成十個檔案的時候就固定取(n/10)個資料到每個檔案中
但我不知道要怎樣寫了@@"
請問有哪些可能方式能解決呢???
※ 引述《frank1206 ( )》之銘言:
: 不好意思,我可能沒說得很清楚
: 但我結合j大與s大的方式
: 大概想出來要怎樣處理了
: data report;
: input stkno a1 a2 a3;
: cards;
: 5738 57 12 96
: 6374 56 73 35
: 7384 36 46 37
: 9999 . 33 23
: 8888 . . 25
: 6666 . 13 .
: ;
: run;
: %macro test(num_a);
: %do i=1 %to &num_a;
: data temp&i (keep=stkno a&i);
: set report;
: if a&i=. then delete;
: run;
: proc sort data=temp&i;
: by descending a&i;
: run;
: PROC RANK DATA=temp&i out = temp&i GROUPS=3 DESCENDING;
: VAR a&i;
: RUN;
: %do j=0 %to 2;
: data a&i&j (keep=stkno);
: set temp&i;
: if a&i=&j;
: run;
: %end;
: %end;
: %mend;
: %test(num_a=3); /* number of a */
: 我的目的是要將每個欄位的資料分成十組,然後只留下該組的股票代號
: 例如 將以下資料分為三組並分別存成一個檔案
: stkno a1
: 1111 44
: 2222 33
: 3333 11
: 4444 77
: 5555 88
: 6666 08
: 結果要有以下三個檔案
: data 1
: stkno
: 5555
: 4444
: data 2
: stkno
: 1111
: 2222
: data 3
: stkno
: 3333
: 6666
: 所以說~~~以上程式碼應該是可以做到的~
: 如果有問題再一起討論吧!!!
: 謝謝各位的關心
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.177.102