g****8 发帖数: 2828 | 1 请教一下有没有什么简单的code解决这个问题。
数据大概是这样的:
Id v1 v2 v3 v4 v5
1 aa aa bb vv dd
2 er re er n/a er
3 n/a aa bb n/a aa
想要count每个id里面v1到v5有几个unique的value,n/a不算。
就是这样。
Id v1 v2 v3 v4 v5 nv
1 aa aa bb vv dd 4
2 er re er n/a er 2
3 n/a aa bb n/a aa 2
好像要是两两比较太麻烦了。因为n/a可能出现在任何地方。 |
j******o 发帖数: 127 | 2 transpose by ID, drop n/a and keep unique v value for each ID, count unique
number by ID, then merge back to original data. |
h********o 发帖数: 103 | 3 Try this:
=================================
data test;
input id (v1 - v5) ($);
cards;
1 aa aa bb vv dd
2 er re er n/a er
3 n/a aa bb n/a aa
4 aa aa aa bb bb
5 aa aa aa aa aa
6 aa bb bb cc cc
7 n/a n/a n/a n/a n/a
;
data temp (keep = id v1-v5 cnt);
set test;
t1=v1;t2=v2;t3=v3;t4=v4;t5=v5;
array arr(5) $ t1 - t5;
do i = 1 to dim(arr);
do j = 2 to dim(arr);
if i ~= j then do;
if arr(i) = arr(j) or arr(i) = "n/a" then arr(i) = "";
end;
end;
end;
cnt = 5-cmiss(of t1-t5);
run; |
s*********n 发帖数: 20 | 4
This may help..
data have;
input (v1-v5) ($);
cards;
aa aa bb vv dd
er re er n/a er
n/a aa bb n/a aa
;
run;
data new;
set have;
call sortc (of v:);
array xs v:;
count=1;
do _n_=1 to dim(xs)-1;
count+( xs(_n_) ne 'n/a' and xs(_n_) ne xs(_n_+1));
end;
set have;
run;
【在 g****8 的大作中提到】 : 请教一下有没有什么简单的code解决这个问题。 : 数据大概是这样的: : Id v1 v2 v3 v4 v5 : 1 aa aa bb vv dd : 2 er re er n/a er : 3 n/a aa bb n/a aa : 想要count每个id里面v1到v5有几个unique的value,n/a不算。 : 就是这样。 : Id v1 v2 v3 v4 v5 nv : 1 aa aa bb vv dd 4
|
D******n 发帖数: 2836 | 5 Your script has a bug on all n/a situations. Following should resolve
it.
data raw;
input id (v1 - v5) ($);
datalines;
1 aa aa bb aa dd
2 er re er n/a er
3 n/a aa bb n/a aa
4 aa aa aa bb bb
5 aa aa aa aa aa
6 aa bb bb cc cc
7 n/a n/a n/a n/a n/a
7 aa n/a n/a n/a zz
;
run;
proc print;run;
data new;
set raw;
call sortc( of v1-v5);
array xs v:;
count=0;
do i=2 to dim(xs);
count+( xs(i-1) ne 'n/a' and xs(i) ne xs(i-1));
end;
count + (xs(dim(xs)) ne 'n/a');
set raw;
run;
proc print;run;
【在 s*********n 的大作中提到】 : : This may help.. : data have; : input (v1-v5) ($); : cards; : aa aa bb vv dd : er re er n/a er : n/a aa bb n/a aa : ; : run;
|