作者frank1206 ( )
看板Statistics
标题Re: [问题] SAS 将一串资料按照数值大小分为十组
时间Wed Mar 23 23:48:15 2011
不好意思又来麻烦各位帮我解惑一下了
之前的问题是要分成十组
虽然透过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
1F:→ frank1206:自己解决:加一排_n_,再排序即可。 03/26 17:37