SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 759|回复: 5
打印 上一主题 下一主题

请达人帮助:使用SAS解决如下的问题,自己已经想了很长时间了都无果

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-5-13 14:21:27 | 只看该作者

请达人帮助:使用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程序如何实现?
另外可不可以把一个数组赋给一个宏变量?
谢谢啊
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-5-13 16:04:10 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-5-14 13:13:42 | 只看该作者

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;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-5-14 13:40:37 | 只看该作者

Re: 请达人帮助:使用SAS解决如下的问题,自己已经想了很长时间了都无果

谢谢上面两位,我会好好分析学习你们的程序,谢谢 ~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2010-5-17 08:10:16 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2010-5-17 14:53:00 | 只看该作者

Re: 请达人帮助:使用SAS解决如下的问题,自己已经想了很长时间了都无果

Jingjiu1  厉害!!!
佩服啊 :)

学习了!楼上的三位!!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 06:43 , Processed in 0.067010 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表