t********m 发帖数: 939 | 1 data test;
input id cc;
cards;
1 1
1 1
2 2
2 2
2 2
;
run;
proc sort data=test;
by id;
run;
我想得到的data如下:
id cc sumcc
1 1 2
1 1 2
2 2 3
2 2 3
2 2 3
也就是说我想统计每个id有多少行数据并将那个值赋给sumcc,最后打印出id的每个
record但是要包含sumcc这个变量。
看着挺简单,可一时搞不出来。请教各位大侠了,多谢多谢! |
s******r 发帖数: 1524 | 2 proc sql;
proc means;
and then merge back?
【在 t********m 的大作中提到】 : data test; : input id cc; : cards; : 1 1 : 1 1 : 2 2 : 2 2 : 2 2 : ; : run;
|
n*****n 发帖数: 3123 | 3 data test;
input id cc;
cards;
1 1
1 1
2 2
2 2
2 2
;
run;
proc sort test;
by id;
run;
proc freq data=test;
table id / out=counts;
run;
data test;
merge test counts(keep = id count rename=(count=sumcc));
by id;
run; |
x********i 发帖数: 1 | 4 根本不用merge的,下面程序就可以满足你要求了:
data test;
input id cc;
cards;
1 1
1 1
2 2
2 2
2 2
;
run;
***********my code;
proc sql;
create table test2 as
select *, count(id) as sumcc
from test
group by id;
run; |
t********m 发帖数: 939 | 5 我写了几乎一样的程序,不过没用count这个function而是用的sum,所以怎么也得不到
我想要的,瞧我笨的啊。多谢大侠!
【在 x********i 的大作中提到】 : 根本不用merge的,下面程序就可以满足你要求了: : data test; : input id cc; : cards; : 1 1 : 1 1 : 2 2 : 2 2 : 2 2 : ;
|
t********m 发帖数: 939 | 6 谢谢,这个方法可行,就是有些些复杂了。
【在 n*****n 的大作中提到】 : data test; : input id cc; : cards; : 1 1 : 1 1 : 2 2 : 2 2 : 2 2 : ; : run;
|
t********m 发帖数: 939 | 7 Thanks,最早就是想到用这个,不过觉得麻烦就没用了。楼下那个proc sql可行。
【在 s******r 的大作中提到】 : proc sql; : proc means; : and then merge back?
|
G********L 发帖数: 12 | 8 data newtest;
set test;
by id;
if first.id then sumcc=0;
sumcc+1;
if last.id;
run;
data test;
merge test newtest;
by id;
run;
【在 t********m 的大作中提到】 : data test; : input id cc; : cards; : 1 1 : 1 1 : 2 2 : 2 2 : 2 2 : ; : run;
|
a***d 发帖数: 336 | 9 proc sql won't give you multiple lines for same id as you want in your
example. to get multiple lines, you will need to merge back.
【在 t********m 的大作中提到】 : Thanks,最早就是想到用这个,不过觉得麻烦就没用了。楼下那个proc sql可行。
|