y*********4 发帖数: 76 | 1 有一个DATA SET如下:
VAR1
1
。。。
。。。
1
2
。。。
。。。
2
3
。。。
。。。
3
1
1
。。。。
反正就是有N多个1,N多个2,N多个3,一直往下。我想做的是只留下前10次出现的1,前
20次出现的2,前30次出现的3,。。。。,其余的都去掉,请教大家有没有什么简洁的
方法?GOOGLE后有看到有LAG FUNCTION的,但是不是特别明白,特别来请教大家了
谢谢!! |
p********a 发帖数: 5352 | 2 sort 后用first.var1累加,取前Var1*10个数据 |
y*********4 发帖数: 76 | 3 还没太想明白。。。没用过FISRT.VAR这个东西。。。不过非常感谢,我回头再研究研
究 |
p********a 发帖数: 5352 | 4 Oops 这可是SAS基础知识啊
【在 y*********4 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 还没太想明白。。。没用过FISRT.VAR这个东西。。。不过非常感谢,我回头再研究研 : 究
|
o****o 发帖数: 8077 | 5 为啥要sort?sort后你不知道是不是原来数据前10个啊
建K个一维数组,每个K*10那么长(当然也可以sum_k K*10那么长的一个就够了);再建一维数组当计数器C,1到K那么长;
依次读入如,是1就依次放入K=1的那个数组,C[1]+1; 是2就依次放入K=2那个数组,C[2]+
1; 依次类推,放满就不继续放了
当所有K个计数器都满了以后就stop
【在 p********a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : sort 后用first.var1累加,取前Var1*10个数据
|
D******n 发帖数: 2836 | 6 proc sort data=a1;by var1 ;run;
data a2 (drop = i);set a1;by var1;retain i;
if (first.var1 eq 1) then i=0;i=i+1;
if (i<=10) then output;run;
【在 y*********4 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 有一个DATA SET如下: : VAR1 : 1 : 。。。 : 。。。 : 1 : 2 : 。。。 : 。。。 : 2
|
y*********4 发帖数: 76 | 7 thanks a lot!!!
By the way, is there anyone who could tell me something about lag function?
is there anyway we could solve it by lag function? |
y*********4 发帖数: 76 | 8 ....i do believe Im still very poor about SAS though Im using it always and
passed the base and adv .....I guess Im just really not into programming
things....
【在 p********a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : Oops 这可是SAS基础知识啊
|
|
y*********4 发帖数: 76 | 9 that actually works perfect for me.
Can i ask for one more questions....
what if I only want to count those var1 with more than 5 records...
for example, some var1 only have 4 obs and i dont want to use those results.
..
【在 D******n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : proc sort data=a1;by var1 ;run; : data a2 (drop = i);set a1;by var1;retain i; : if (first.var1 eq 1) then i=0;i=i+1; : if (i<=10) then output;run;
|