SAS中文论坛
标题:
请达人帮助:使用SAS解决如下的问题,自己已经想了很长时间了都无果
[打印本页]
作者:
shiyiming
时间:
2010-5-13 14:21
标题:
请达人帮助:使用SAS解决如下的问题,自己已经想了很长时间了都无果
请达人帮助:使用SAS解决如下的问题,自己已经想了很长时间了
样本序号 样本序号 num
13 13 1
12 11 1
4 3 1
16 10 1
22 22 2
10 16 4
11 12 6
2 2 7
3 4 9
15 9 9
9 14 10
14 17 11
7 1 11
17 7 13
21 21 14
8 8 15
18 15 16
1 18 18
19 20 18
5 19 19
20 6 20
6 5 22
目的:通过前两列来求第三列
第3列的值是第2列对应的值在地1列中的个数(行数也是在变的)
比如:
第1行:13 13 1,1是因为第2列对应的数组(13)在第1列对应的数组(13)中的个数只有1个,即13
第2行:12 11 1,1是因为第2列的数组(13,11)在第1列对应的数组(13,12)中的个数只有1个,即13,11不在
第6行:10 16 4,4是因为第2列的数组(13,11,3,10,22,16)在第1列对应的数组(13,12,4,16,22,10)中的 个数只有14个,即13、10、22、16,11和3不在
依次都是这样计算的
请问有SAS程序如何实现?
另外可不可以把一个数组赋给一个宏变量?
谢谢啊
作者:
shiyiming
时间:
2010-5-13 16:04
标题:
Re: 请达人帮助:使用SAS解决如下的问题,自己已经想了很长时间了都无果
[code:1c7jvz8e]data raw;
input sample_id1 sample_id2 std_num;
no=_n_;
datalines;
13 13 1
12 11 1
4 3 1
16 10 1
22 22 2
10 16 4
11 12 6
2 2 7
3 4 9
15 9 9
9 14 10
14 17 11
7 1 11
17 7 13
21 21 14
8 8 15
18 15 16
1 18 18
19 20 18
5 19 19
20 6 20
6 5 22
;
data out(drop=rc i j);
if _n_=1 then
do;
declare hash h1(dataset:"raw",hashexp:16);
rc=h1.definekey('no');
rc=h1.definedata('sample_id1');
rc=h1.definedone();
call missing(no,sample_id1);
declare hash h2(dataset:"raw",hashexp:16);
rc=h2.definekey('no');
rc=h2.definedata('sample_id2');
rc=h2.definedone();
call missing(no,sample_id2);
end;
set raw;
compute_num=0;
do i=1 to _n_;
rc=h1.find(key:i);
do j=1 to _n_;
rc=h2.find(key:j);
if sample_id1=sample_id2 then compute_num+1;
end;
end;
run;[/code:1c7jvz8e]
作者:
shiyiming
时间:
2010-5-14 13:13
标题:
Re: 请达人帮助:使用SAS解决如下的问题,自己已经想了很长时间了都无果
data aa;
input x y@@;
cards;
13 13 12 11 4 3 16 10 22 22 10 16
11 12 2 2 3 4 15 9 9 14 14 17 7 1 17 7 21 21
8 8 18 15 1 18 19 20 5 19 20 6 6 5
;
proc iml;
use aa;
read all var{x} into xxx;
read all var{y} into yyy;
zzz=j(nrow(xxx),1);
do i=1 to nrow(xxx);
zzz[i,1]=ncol(xsect(xxx[1:i,],yyy[1:i,]));
end;
print xxx yyy zzz;
quit;
作者:
shiyiming
时间:
2010-5-14 13:40
标题:
Re: 请达人帮助:使用SAS解决如下的问题,自己已经想了很长时间了都无果
谢谢上面两位,我会好好分析学习你们的程序,谢谢 ~
作者:
shiyiming
时间:
2010-5-17 08:10
标题:
Re: 请达人帮助:使用SAS解决如下的问题,自己已经想了很长时间了都无果
前面两位用的都是我心仪很久却没有掌握的方法。我想,还是用data步试试:还有array的维度只要不小于data的总观测数即可
借用IML的data set
[code:1b9tz0ec]DATA B;
SET AA;
ARRAY N1_{100} _TEMPORARY_; ARRAY N2_{100} _TEMPORARY_;
N1_{_N_} = x; N2_{_N_} = y;
DO _N_ = 1 TO _N_;
IF x = N2_[_N_] THEN NUM1 +1;
IF y = N1_[_N_] THEN NUM1 +1;
END;
IF x = y THEN NUM1+-1;
RUN;[/code:1b9tz0ec]
作者:
shiyiming
时间:
2010-5-17 14:53
标题:
Re: 请达人帮助:使用SAS解决如下的问题,自己已经想了很长时间了都无果
Jingjiu1 厉害!!!
佩服啊 :)
学习了!楼上的三位!!!!
欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/)
Powered by Discuz! X3.2